【问题标题】:Better solution to write out cases写出案例的更好解决方案
【发布时间】:2020-01-25 19:15:09
【问题描述】:

我的程序从输入的文本字符串中计算元音和辅音。有没有办法让我的案例更加简化并且看起来不像一个集群?只是想知道是否有更好的方法来写出来。

【问题讨论】:

  • 用代码替换照片。
  • 嗨 Kadex,您可以通过仅检查 AEIOU 的元音并放置辅音来减少行数
  • 字符的“元音”或“辅音”有文化依赖的一面。我想你的任务是对英文文本进行分类,但这应该明确说明。

标签: c# .net


【解决方案1】:

由于您有一种方法可以检查char 是否为字母,因此您可以使用Contains 方法检查current char 是否为vowelconsonant

使用此方法,您可以使用ternary 运算符找出vowelsconsonants计数

if(char.IsLetter(ch)){
   "aeiouAEIOU".Contains(ch) ? vowelCount++ : consonantCount++;
}

【讨论】:

  • 我认为改用Contains 会更惯用。
【解决方案2】:

尝试使用正则表达式

var s = "Test, One two three";

Regex r = new Regex("[a-zA-Z]");
MatchCollection m = r.Matches(s);
Regex rv = new Regex("[aeiouAEIOU]");
MatchCollection mv = rv.Matches(s);

var vowels = mv.Count;
var consonants = m.Count - mv.Count;

【讨论】:

    【解决方案3】:

    你可能想打我的脸,但你可以使用位掩码

    string str = "Test. One two three.";
    
    //               zyxwvutsrqponmlkjihgfedcba      ZYXWVUTSRQPONMLKJIHGFEDCBA
    long bitmask = 0b0000010000010000010001000100000000000100000100000100010001;
    
    int vowels = 0, consonants = 0;
    
    foreach (var ch in str)
    {
        if(char.IsLetter(ch))
        {
            int shift = ch - 'A';
            if (((bitmask >> shift) & 1) == 1) vowels++;
            else consonants++;
        }
    }
    
    Console.WriteLine("Vowels: " + vowels);
    Console.WriteLine("Consonants: " + consonants);
    

    或者你可以使用这个幻数作为位掩码4575140898685201

    【讨论】:

      【解决方案4】:

      这里是代码 sn-p,它可以为您提供所需的输出。

              string text = "This is a Demo Content";
              text = text = Regex.Replace(text, @"[^a-zA-Z]+", "");
              char[] vowels = new char[] { 'a', 'e', 'i', 'o', 'u','A','E','I','O','U' };
              var vowelsCount = text.Count(x => vowels.Contains(x));
              var consonantCount = text.Count(x => !vowels.Contains(x));
      

      【讨论】:

      • 将正则表达式替换为此代码:text = Regex.Replace(text, @"[^a-zA-Z]+", "");。 [0-9] 是不是字母的数字,您可以在正则表达式替换为空字符串替换不需要第二次替换
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      相关资源
      最近更新 更多