В вашем коде есть несколько ошибок. Тот, с которым вы столкнулись сейчас, это:
int max_val = str.size();
...
str.at(max_val)
Здесь вы индексируете один за концом вашей строки.
Следующее - ваше условие l oop конфликтует с одним из inner if
s:
for (int i = 0;i < max_val;i++)
...
if (i == max_val)
l oop останавливается, когда i
становится равным max_val
, поэтому if
никогда не будет истинным. @artm предоставляет возможное решение для обоих из них в своем ответе.
Последняя ошибка, которую я заметил в вашей программе, заключается в том, что вы продолжаете l oop через строку даже после обнаружения несоответствующего пара символов. Это означает, что, хотя ваша программа работает с исправлениями @artm, она также сообщает "MOTOR" как палиндром. Вы можете исправить это, вернув false
, как только обнаружите несоответствующую пару - или, если вы настаиваете на цикле по всей строке, затем инициализируйте bool result = true
и измените свой l oop на что-то вроде:
for (int i = 0;i <= max_val;i++)
{
result = result && (str.at(i) == str.at(max_val));
max_val = max_val - 1;
}