-1

私はこのコードを持っています:

int n,m; // n - rows count , m - columns in each row count
cin >> n >> m;
string wiersze[n];
int wynik=0;
for(int i = 0; i < n;i++)
{
    cin >> wiersze[i];
}
for(int i = 0; i < n;i++)
{
    for(int j =0; j<m-1;j++)
    {
        cout << j << " " << j+1<<endl; // debbuging line 
        cout<<wiersze[i].at(j)<<wiersze[i].at(j+1)<<endl;   // debbuging line       
        if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;
    }
}

文字列に文字が 2 つある場合は、 variable を増やす必要がありますwynik。理由はわかりませんが、この例でそのコードを実行します。

4 4

あば

ああああ

あば

ばあ

行内でstd::out_of_rangeエラーが発生します。string::atif(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;

私はデバッグを試み、何が起こっているのかを確認するためにループに 2 行を追加しました。結果:

0 1

ああ

1 2 ab

2 3

0 1

ああ

1 2

ああ

2 3

ab

0 1

ああ

1 2

ab

2 3

0 1

bb

1 2

2 3

ああ

最後の 2 行を見てください。計算によって次の行が存在しないことが正確に示されています。もちろん、私は「ばかげた」間違いと小さなデバッグを探してみましたが、それ以外の結果はありませんでした。私の場合、助けてください。

4

1 に答える 1

0

まず、配列にメモリを割り当てることはできません。変数 nはwiersze[n]コンパイル時にわかっている必要がありますが、ここではわかりません。配列を動的に初期化する必要があります。

string* wiersze = new string[n];
于 2014-06-09T14:10:46.247 に答える