static void Main(string[] args)
{
int counter = 0;
List<string> namesList = new List<string>();
List<char> vowels = new List<char>() { 'a', 'e', 'i', 'o', 'u' };
Console.WriteLine("Please enter the word");
for (int i = 0; i < 5; i++)
{
string userInput = Console.ReadLine().ToLower();
namesList.Add(userInput);
foreach (char c in userInput)
{
if (vowels.Contains(c))
{
counter++;
}
}
Console.WriteLine("In the word {0} is {1} vowels", namesList[i], counter);
}
}
我正在尝试用用户要在控制台中输入的单词来查找元音,但是通过计数器,我可以设法以5个单词来计算元音的总数,但不能单独计算,有人可以建议我该怎么做?在上面的代码计数器中,计数是这样的1、2、3、4、5 ...,如果第二个单词包含2个元音,它将显示数字5。
答案 0 :(得分:2)
我们可以使用正则表达式来匹配句子中的元音。 Regex.Matches()函数将返回一个包含所有元音的数组。 然后,我们可以使用count属性来找到元音的数量。
正则表达式,用于匹配字符串中的元音: [aeiouAEIOU] +
下面是工作代码段:
public static void Main()
{
string pattern = @"[aeiouAEIOU]+";
Regex rgx = new Regex(pattern);
string sentence = "Who writes these notes?";
Console.WriteLine(rgx.Matches(sentence).Count);
}
答案 1 :(得分:0)
简化您的代码,提取方法,让counter
仅属于CountVowels
:
//TODO: HashSet<char> can well appear a better collection
private static List<char> s_Vowels = new List<char>() {
'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
private static int CountVowels(string value) {
// Or one line Linq:
// return value.Count(c => s_Vowels.Contains(c));
int count = 0;
foreach (char c in value)
if (s_Vowels.Contains(c))
count += 1;
return count;
}
然后使用它:
static void Main(string[] args) {
List<string> namesList = new List<string>();
for (int i = 0; i < 5; i++) {
namesList.Add(Console.ReadLine());
Console.WriteLine($"In the word {namesList[i]} is {CountVowels(namesList[i])} vowels");
}
...
}