在字符串中显示最常用的元音c#

时间:2014-04-02 14:16:31

标签: c# string count

我用字符串计算元音和辅音。现在我想在这个字符串中显示最常用的元音和辅音我用于计数的代码

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        char[] charArray = new char[] { 'a', 'e', 'i', 'o', 'u' };
        string line = testBox.Text.ToLower();

        char letter;
        int vowels = 0;
        int sug = 0;
        for (int i = 0; i < line.Length; i++)
        {
            letter = line[i];

            if (charArray.Contains(letter))
                vowels++;
            if (!charArray.Contains(letter))
                sug++;
        }

        MessageBox.Show("number of vowels is" + vowels.ToString());
        MessageBox.Show("number of vowels is" + sug.ToString());
    }

3 个答案:

答案 0 :(得分:4)

制作元音和常量列表而不是int计数器,然后您可以在稍后阶段操作每个列表。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        char[] charArray = new char[] { 'a', 'e', 'i', 'o', 'u' };
        string line = testBox.Text.ToLower();

        char letter;
        List<char> vowels = new List<char>();
        List<char> sug = new List<char>();
        for (int i = 0; i < line.Length; i++)
        {
            letter = line[i];

            if (charArray.Contains(letter))
                vowels.Add(letter);
            if (!charArray.Contains(letter))
                sug.Add(letter);
        }

        MessageBox.Show("number of vowels is" + vowels.Count);
        MessageBox.Show("number of vowels is" + sug.Count);

        MessageBox.Show("most used vowel: " + vowels.GroupBy(x => x).OrderByDescending(xs => xs.Count()).Select(xs => xs.Key).First());
        MessageBox.Show("most used constant: " + sug.GroupBy(x => x).OrderByDescending(xs => xs.Count()).Select(xs => xs.Key).First());
    }

答案 1 :(得分:1)

好的,这是一种方法。由于linq和lambadas的大量使用,它可能会更先进一些。它确实有效,但我建议将一些功能分解为功能。

char[] charArray = new char[] { 'a', 'e', 'i', 'o', 'u' };
string line = "bbcccaaaeeiiiioouu";

var vowelCounts = new Dictionary<char, int>();

foreach(var vowel in charArray)
{
    vowelCounts.Add(vowel, line.Count(charInString => vowel == charInString));
}

var consonantCounts = new Dictionary<char, int>();

foreach(var consonant in line.Where(charInString => !charArray.Contains(charInString)).Distinct())
{
    consonantCounts.Add(consonant, line.Count(charInString => consonant == charInString));
}

KeyValuePair<char, int> mostUsedVowel = vowelCounts.OrderBy(Entry => Entry.Value).FirstOrDefault();
KeyValuePair<char, int> mostUsedConsonant = consonantCounts.OrderBy(Entry => Entry.Value).FirstOrDefault();

string output1 = String.Format("The Vowel '{0}' was used {1} times", mostUsedVowel.Key, mostUsedVowel.Value);
string output2 = String.Format("The Consonant '{0}' was used {1} times", mostUsedConsonant.Key, mostUsedConsonant.Value);

MessageBox.Show(output1);
MessageBox.Show(output2);

答案 2 :(得分:1)

As String是一个不可分割的字符您可以使用LINQ Group By函数按字符分组,然后使用组进行各种评估: http://dotnetfiddle.net/dmLkVb

var grouped = line.GroupBy(c=> c);

var vowels = grouped.Where(g => charArray.Contains(g.Key));
var mostUsed = vowels.OrderBy(v => v.Count()).Last();

Console.WriteLine("Distinct characters: {0}:", grouped.Count());
Console.WriteLine("Vowels: {0}:", vowels.Count());
Console.WriteLine("Most used vowel: {0} - {1}:", mostUsed.Key, mostUsed.Count());