计算字符串c#中的元音

时间:2016-12-22 07:29:39

标签: c#

我正在制作一个程序来分析用户输入的句子的特征。为了计算句子中的元音,我在这里制作了一个非常混乱的foreach循环序列:

foreach (char v1 in input)
{
    if (v1 == 'a')
    {
        vcounter++;
    }
}
foreach (char v2 in input)
{
    if (v2 == 'e')
    {
        vcounter++;
    }
}
foreach (char v3 in input)
{
    if (v3 == 'i')
    {
        vcounter++;
    }
}
foreach (char v4 in input)
{
    if (v4 == 'o')
    {
        vcounter++;
    }
}
foreach (char v5 in input)
{
    if (v5 == 'u')
    {
        vcounter++;
    }
}

然后我拿出vcounter并将其显示为结果。我对c#很新,我想知道是否有人能提出更好的方法吗?。

8 个答案:

答案 0 :(得分:5)

将元音存储在这样的数组中:

private readonly char[] vowels = new char[] { 'a', 'e', 'i', 'o', 'u' };

然后算上他们:

public int CountVowels(string text)
{
    return text.ToLower().Count(x => vowels.Contains(x));
}

答案 1 :(得分:0)

如果您使用的是.NET 3.5或更高版本,则可以使用LINQ。

vcounter += input.Count(v => v == 'a');
vcounter += input.Count(v => v == 'e');
vcounter += input.Count(v => v == 'i');
vcounter += input.Count(v => v == 'o');
vcounter += input.Count(v => v == 'u');

为此,您必须在文档中导入LINQ。

using System.Linq;

答案 2 :(得分:0)

您可以尝试使用以下代码:

const string vowels = "aeiou";
var count = input.Count(chr => vowels.Contains(char.ToLower(chr)));

for (int i = 0; i < input.Length; i++)
    {
        if (input[i]  == 'a' || input[i] == 'e' || input[i] == 'i' || input[i] == 'o' || input[i] == 'u')
        {
            count++;
        }
    }

答案 3 :(得分:0)

将元音存储在列表中:

List<Char> vowels = new List<char>() { 'a', 'e', 'i', 'o', 'u' };

算这样:

int vcounter = 0;
foreach (char chr in input)
{
   if (vowels.Contains(chr))
   {
       vcounter++;
   }
}

答案 4 :(得分:0)

试试这个:

var text = "hfdaa732ibgedsoju";
var vowels = new[] { 'a', 'e', 'i', 'o', 'u' };
var vowelFrequency = text.Where(c => vowels.Contains(c))
                         .GroupBy(c => c)
                         .ToDictionary(g => g.Key, g.Value.Count());

将创建一个类似于马克西姆答案的词典,但只能使用元音。

使用vowelFrequency.Sum(vf => vf.Value)获取字符串中元音的总数。

答案 5 :(得分:0)

效率不高,但很短

{{1}}

答案 6 :(得分:0)

您可以使用正则表达式:

vcounter = Regex.Matches(input, "a|e|i|o|u", RegexOptions.IgnoreCase).Count;

答案 7 :(得分:0)

您可以保留此功能。我创建了一个包含一些字母的数组。

 private void button1_Click(object sender, EventArgs e)
        {
            string [] array = { "a", "b", "c", "d" };
            int vcounter = 0;
            foreach (var item in array)
            {
                if (item.Contains("a") || item.Contains("e") || item.Contains("i")) //You can add the other volwes 
                {
                    vcounter++;
                }
            }
            MessageBox.Show("Count of vowels : " + vcounter.ToString());
        }