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>
  • ループを 1 つだけ作成します。文字列内の各文字に対して。
  • ループ内Dictionary<char, int>で、結果を a に入力します。
  • char が辞書に存在する場合は、int を int++ に設定します。存在しない場合は、int が 1 の辞書に char を追加します。
  • ループの外で、AddRange を lstFreqMeter.Items に追加します。
于 2013-10-21T16:31:49.777 に答える
1

Countを使用して、文字列内の文字数を取得できます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 に答える