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

本文关键字:常用 显示 字符串 | 更新日期: 2023-09-27 17:56:06

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

    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());
    }

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

制作元音和常量列表而不是 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());
    }
好的,

这是一种方法。由于大量使用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);

因为字符串是字符的枚举 您可以使用 LINQs GroupBy 函数按字符分组,然后对组进行各种计算: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());