1

我正在 Visual c# windows 窗体应用程序中开发一个程序。我需要找出文本框中的字符数并在列表框中显示每个字符的频率。我有以下代码:

private void btnCheckFrequency_Click(object sender, EventArgs e)
{
    lstFreqMeter.Items.Clear();

    string str;
    int c = 1;
    int strlen;

    str = txtString.Text;

    strlen = txtString.TextLength;

    int[] counter = new int[strlen];

    for (int i = 0; i < strlen; i++)
    {
        for (int j = i + 1; j < strlen; j++)
        {
            if (str[i] == str[j])
            {
                c += 1;

            }
        }
        counter[i] = c;
        c = 1;
    }
    for (int k = 0; k < counter.Length; k++)
    {
        lstFreqMeter.Items.Add(counter[k]);
    }
}

在这段代码中,当我单击“检查频率”按钮时,程序会给出每个字符和重复字符的频率以及我们不想要的空格作为输出。

4

4 回答 4

2

完成此操作的 3 个循环是您出错的地方。我认为你试图让它变得太复杂。

它不赞成回答家庭作业问题,但有关方向的一些提示应该会有所帮助。

  • 声明一个Dictionary<char, int>
  • 只做一个循环。对于字符串中的每个字符。
  • 在循环内,Dictionary<char, int>用您的结果填充 a。
  • 如果字典中存在char,则将int设置为int++,如果不存在,则将char添加到字典中,int为1。
  • 在循环之外,将范围添加到您的 lstFreqMeter.Items。
于 2013-10-21T16:31:49.777 回答
1

尝试这样的事情:

 var letters = Enumerable.Range('A', 26).Select(i => (char)i);
 var sourceChars = letters.Concat(myString.ToUpperInvariant());
 var results = from c in sourceChars
                      group c by c into g
                      where char.IsLetter(g.Key)
                      orderby g.Key
                      select new { Char = g.Key, Count = g.Count() - 1 };

 foreach (var result in results)
 {
     Console.WriteLine("There are {0} {1}'s.", result.Count, result.Char);
 }

这将为您返回每个字母出现多少次的类myString

于 2013-10-21T16:38:13.143 回答
1

Count您可以通过使用on获取字符串中的字符数string

获取每个字符的频率,您可以遍历字符串并增加一个整数。字典(键/值列表)将是保存此数据的绝佳数据类型。

    const string textString = "aaabbbcccaaattteeevvvooo";
    var numberOfChars = textString.Count();

    var dictionary = new Dictionary<char,int>();
    foreach (var letter in textString)
    {
        if (dictionary.ContainsKey(letter))
            dictionary[letter]++;
        else
            dictionary[letter] = 1;
    }

Dictionary 将包含一个键(字符)和一个值(计数)。

于 2013-10-21T16:31:35.833 回答
1

维护匹配字符的字典,并在匹配时增加每个字符的计数。

Dictionary<char, int> count = new Dictionary<char,int>();
string str = textString.Text;
int len = str.Length;
for(int i = 0; i < len; i ++)
{
   if (str[i] == ' ') continue;
   if (count.ContainsKey(str[i]))
   {
      count[str[i]] += 1;
   } else {
      count.Add(str[i], 1);
   }
}

foreach(char key in count.Keys)
{
   Console.WriteLine("{0} : {1}", key, count[key]);
}
于 2013-10-21T16:33:28.497 回答