-6
public class Word
{
    private string _inputWord;
    public Word()
    {
        Console.WriteLine("Enter a word");
        _inputWord = Console.ReadLine();

    }

    public void sortandcount()
    {
        char[] test = _inputWord.ToCharArray();
        char temp;
        int count = 0, tcount = 0;
        Array.Sort(test);
        int length = test.Length;
        temp = test[0];

        while (length > 0)
            {
                for (int i = 0; i < test.Length; i++)
                {
                    if (temp == test[i])
                    {
                        count++;
                    }
                }
                Console.WriteLine(temp + " " + count);
                tcount = tcount + count;
                temp = test[tcount]; //this line 
                length = length - count;
                count = 0;
            }
        }



    }

    class Program
    {
        public static void Main() //this line 
        {
        Word obj = new Word();
obj.sortandcount();
        }
    }

その行のコメントとして(//プログラムのこの行として)指定した2行で例外が発生します。これをクリアするのを手伝ってもらえますか。プログラムのアイデアは、特定の単語の文字数(同じ)をカウントすることです。例: アップル a-1 p-2 l-1 e-1

4

4 に答える 4

2

すべての文字を数えたら、それは1 つの要素を 0 までインデックス付けtcount == test.lengthすることを意味します。test[tcount]

任意の配列 arr をarr[arr.length]指定すると、arr のインデックスはゼロであるため、常に範囲外になります。temp = test[tcount] の前tcount < test.lengthに、ロジックにもエラーがあることを確認する必要があります

obo印刷される単語で試してくださいo 2 o 2

単語の文字を数える単純な実装 (順序が単語に表示される順序である必要がない場合) は、次のようになります。

var result = test.Aggregate(new Dictionary<char,int>(), (state,c)=>{
                if(!state.ContainsKey(c)) { state.Add(c,0); }
                state[c] += 1;
                return state;
             });

foreach(var pair in result) { Console.WriteLine(pair.Key + " " + key.Value); }

単語に表示されるのと同じ順序で並べ替える必要がある場合は編集し、foreach をこれに変更します

foreach(var pair in result.OrderBy(p=>test.IndexOf(p.Key))) {
   Console.WriteLine(pair.Key + " " + key.Value);
}
于 2013-10-11T07:04:52.300 に答える
0

もう少し「プログラム」バージョン:

public class Word
{
    private string _inputWord;
    public Word()
    {
        Console.WriteLine("Enter a word");
        _inputWord = Console.ReadLine();
    }

    public void SortAndCount()
    {
        // sort
        char[] array = _inputWord.ToCharArray();
        Array.Sort(array);
        // for all characters
        for(int i = 0; i < array.Length; i++)
        {
            // duplicate check
            if(i > 0 && array[i] == array[i - 1])
                continue;
            // count
            int count = 0;
            for(int j = 0; j < array.Length; j++)
                if(array[i] == array[j])
                    count++;
            Console.WriteLine(array[i] + " " + count);
        }
   }
}

class Program
{
    public static void Main()
    {
        Word obj = new Word();
        obj.SortAndCount();
    }
}
于 2013-10-11T07:18:01.980 に答える
0

コードにバグが含まれています

 int length = test.Length; // This is not zero based

カウントがゼロベースの場合、ループはさらに 1 回繰り返します。

 temp = test[tcount]

tcount が test の長さよりも 1 文字大きくなったために失敗します。

最善の方法は

int length = test.Length -1;

これが役立つかどうか教えてください:)良い一日を

于 2013-10-11T07:12:33.277 に答える