查找单词中的元音编号

时间:2018-10-22 12:56:04

标签: c#

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。

2 个答案:

答案 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");
  }

  ...
}