У меня есть этот код:
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
аа
Пожалуйста, посмотрите на две последние строки — это показывает, что следующей строки не существует! Я, конечно, пытался искать «глупые» ошибки и небольшие отладки, но без какого-либо результата, кроме этого, вы можете увидеть выше. Пожалуйста, помогите мне в моем случае.
Прежде всего, вы НЕ МОЖЕТЕ выделять память для массива, как вы это сделали. В wiersze[n]
переменная n должна быть известна во время компиляции, но здесь это не так. Вы должны инициализировать массив динамически:
string* wiersze = new string[n];