Здесь
for(int i=s.length()-1,j=0;i>=s.length()/2;i--,j++){
, когда s
имеет размер 1, s.length()/2
представляет собой unsigned количество со значением 0. При сравнении целого числа без знака, целое число равно перед сравнением преобразуется в неподписанное. Проверка, является ли значение без знака> = 0, всегда истинно, так что это бесконечное значение l oop. Вот почему это дает сбой.
Я надеюсь, что ваш компилятор предупредит вас об опасностях сравнения со знаком и без знака.
Вот один из способов исправить это конкретное l oop, но я ' Я предполагаю, что у вас есть подобные проблемы в других местах вашего кода.
for (size_t i = s.length(), j = 0; i > s.length()/2; ++j) {
--i;
if (s[i] != s[j]) {
tilt = s[i] > s[j] ? -1 : 1;
s[i] = s[j];
}
}
Несколько советов
- Используйте
size_t
для индексных переменных. - Когда цикл в обратном направлении будет очень осторожно относясь к условию завершения, я делаю так, чтобы переменная была больше, чем она должна быть, и уменьшала ее в начале l oop вместо конца. Таким образом, вы сравниваете с
>
, а не >=
и избегаете проблем, с которыми сталкивается ваш код. - Попробуйте использовать в своем коде пробелы. Это облегчает чтение для всех, включая вас.