Ошибка std :: out_of_range, вызванная string.at ()

У меня есть этот код:

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++;
}
}

Когда в строке две буквы, я должен увеличить переменную wynik,
Я не знаю почему, но запускаю этот код на этом примере:

4 4

AABA

AAAB

AABA

bbaa

причины std::out_of_range ошибка на string::at в ряду if(wiersze[i].at(j) == wiersze[i].at(j+1))wynik++;,

Я попытался отладить и добавил две строки в цикле, чтобы увидеть, что происходит. Результаты:

0 1

аа

1 2 ab

2 3

ба

0 1

аа

1 2

аа

2 3

аб

0 1

аа

1 2

аб

2 3

ба

0 1

бб

1 2

ба

2 3

аа

Пожалуйста, посмотрите на две последние строки — это показывает, что следующей строки не существует! Я, конечно, пытался искать «глупые» ошибки и небольшие отладки, но без какого-либо результата, кроме этого, вы можете увидеть выше. Пожалуйста, помогите мне в моем случае.

-1

Решение

Прежде всего, вы НЕ МОЖЕТЕ выделять память для массива, как вы это сделали. В wiersze[n] переменная n должна быть известна во время компиляции, но здесь это не так. Вы должны инициализировать массив динамически:

string* wiersze = new string[n];
0

Другие решения


По вопросам рекламы [email protected]