Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++. Почему возникает ошибка?

Вячеслав Никишин Ученик (111), на голосовании 5 месяцев назад
Нужно проверить, является ли слово палиндромом.
Вот мой код:
 #include 
#include
#include

using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

string s, s_reversed;
int k = 0;

cout << "Введите слово: ";
cin >> s;

for(unsigned int i = 0; i < s.size(); i++)
{
if(s[i] == ' ') { cout << "Ошибка! Должно быть одно слово!" << endl; return 1; }
}

for(unsigned int j = s.size()-1; j >= 0; j--)
{
s_reversed.insert(k, s.substr(j, 1));
k++;
}

if(s == s_reversed) cout << "Слово является палиндромом!" << endl;
else cout << "Не палиндром!" << endl;

return 0;
}

Почему-то когда начинается выполнение последнего цикла…
 for(unsigned int j = s.size()-1; j >= 0; j--)  
{
s_reversed.insert(k, s.substr(j, 1));
k++;
}
…возникает ошибка «This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information»‎.

При этом, если чуть-чуть изменить цикл на такой…
 for(int j = int(s.size())-1; j >= 0; j--)   
{
s_reversed.insert(k, s.substr(j, 1));
k++;
}
…то всё работает прекрасно. А в чём причина такого поведения?

Если что, я учусь в Visual C++ 2008.
Голосование за лучший ответ
tuiyuo Профи (551) 6 месяцев назад
for(unsigned int j = s.size(); j-- > 0; )
{
s_reversed.insert(k, s.substr(j, 1));
k++;
}
Вячеслав НикишинУченик (111) 6 месяцев назад
Мы же так выйдем за границы строки.
tuiyuo Профи (551) Вячеслав Никишин, for (unsigned int j = s.size(); j > 0; j--) { s_reversed.insert(k, s.substr(j-1, 1)); k++; }
Похожие вопросы