【发布时间】:2020-01-25 19:15:09
【问题描述】:
【问题讨论】:
-
用代码替换照片。
-
嗨 Kadex,您可以通过仅检查 AEIOU 的元音并放置辅音来减少行数
-
字符的“元音”或“辅音”有文化依赖的一面。我想你的任务是对英文文本进行分类,但这应该明确说明。
【问题讨论】:
由于您有一种方法可以检查char 是否为字母,因此您可以使用Contains 方法检查current char 是否为vowel 或consonant。
使用此方法,您可以使用ternary 运算符找出vowels 和consonants 的计数。
if(char.IsLetter(ch)){
"aeiouAEIOU".Contains(ch) ? vowelCount++ : consonantCount++;
}
【讨论】:
Contains 会更惯用。
尝试使用正则表达式
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;
【讨论】:
你可能想打我的脸,但你可以使用位掩码
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
【讨论】:
这里是代码 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] 是不是字母的数字,您可以在正则表达式替换为空字符串替换不需要第二次替换