1

コードに間違いは見つかりません。
ここでは、文字列からすべての数値を選択しようとしています:(
例を単純化するために、ある条件を満たす数値を選択したい)
配列のインデックスを処理したくないので、キューを使用します。

        Console.Write("enter string: ");
        string s = Console.ReadLine();
        char[] array = s.ToCharArray();
        Queue<char> q = new Queue<char>();

        for (int i = 0; i < array.Length; i++)
        {
            q.Enqueue(array[i]);
        }

        char[] new_array = new char[q.Count];
        for (int i = 0; i < q.Count; i++)
        {
            new_array[i] = q.Dequeue();
        }

        Console.WriteLine(new String(new_array));    

入力文字列:123456
そして出力は少し奇妙です:
123

別の入力:123
出力:12

もちろん間違えました)でも大丈夫そうです
よろしくお願いします

4

5 に答える 5

4

問題は2番目のループです。

    for (int i = 0; i < q.Count; i++)
    {
        new_array[i] = q.Dequeue();
    }

q.Countループの反復ごとに減少し、相互作用ごとに増加iするため、要素の半分しか取得できません。

次のようなものを試してください:

    for (int i = 0; q.Count > 0; i++)
    {
        new_array[i] = q.Dequeue();
    }

また、考慮してください:Queue.toArray

于 2012-11-01T14:17:47.443 に答える
1

andList<char>の代わりに使用することをお勧めします。ここには特にキューが必要なものはなく、Rudolfが指摘した問題を回避でき、配列よりも操作がはるかに簡単です。ループの代わりに使用して、中間ステップを回避することもできます。Queue<char>char[]Listforeachfor

    Console.Write("enter string: ");
    string s = Console.ReadLine();
    List<char> new_array = new List<char>();
    foreach(char c in s.ToCharArray())
    {
        new_array.Add(c);
    }

    Console.WriteLine(new String(new_array.ToArray()));  
于 2012-11-01T14:32:20.770 に答える
1

エラーの理由はすでに述べられているので、2つのループを2つのステートメントに置き換えることができます

//A version of Queue constructor accepts IEnumerable object.
//you can directly pass the string to the queue constructor.
Queue<char> Que = new Queue<char>("123456");

//Copies the array and the position is preserved
var new_arr= Que.ToArray();
于 2012-11-01T14:35:56.600 に答える
0

MSDNによると:

キューの先頭にあるオブジェクトを削除して返します。

于 2012-11-01T14:18:29.877 に答える
0

Dequeue()を使用すると、q.Count値は反復ごとに変化します。したがって、このループでq.Countを使用するのではなく、

 for (int i = 0; i < q.Count; i++)

使用する

 int queueSize = q.Count;
 for (int i = 0; i < queueSize; i++)   

これにより、Dequeue()を使用して異なる値を見つけるために各反復でループ制限を計算するのではなく、ループ制限を定数として保持します。

于 2012-11-01T15:12:47.697 に答える