#include <iostream>
#include <ctype.h>
using namespace std;
void isPalindrome();
int main()
{
char response;
isPalindrome();
cout << "Input another string(y/n)?" << endl;
cin >> response;
response = toupper(response);
if (response == 'Y')
isPalindrome();
return 0;
}
void isPalindrome()
{
char str[80], str2[80];
int strlength;
int j = 0;
int front, back;
bool flag = 1;
cout << "Input a string:" << endl;
cin.getline(str, 80);
strlength = strlen(str);
for (int i = 0; i < strlength; i++)
{
if (islower(str[i]))
str[i] = toupper(str[i]);
}
for (int i = 0; i < strlength; i++)
{
if (isalpha(str[i]))
{
str2[j] = str[i];
j++;
}
}
str2[j] = '\0';
front = 0;
back = strlength - 1;
for (int i = 0; i < j / 2; i++)
{
if (str2[front] != str2[back])
{
flag = 0;
break;
}
}
if (!(flag))
cout << "It is not a palindrome" << endl;
else
cout << "It's a palindrome" << endl;
cout << "str: " << str << " str2: " << str2 << " strlength: " << strlength << " j: " << j << endl;
cout << "front: " << front << " back: " << back << " flag: " << flag << endl;
}
Мне просто интересно, кто-нибудь может мне помочь объяснить, почему мой код не работает.
Я могу запустить его один раз, и я получаю правильный ответ, но когда приглашение спрашивает, хочу ли я ввести другую строку, и я набираю 'y'
, приглашение просто пропускает ввод и завершается самостоятельно.
Я пытался cin.ginore('\n', 80)
, но это просто дало мне кучу пустых строк. Я добавил немного кода в конце, чтобы проверить значения, и все они идут к 0
и отбрасывают строки.
Может быть, ссылка на правильное объяснение того, как система обрабатывает память?
редактирование:
Я продолжаю получать ту же проблему при запуске входной последовательности во второй раз. Вывод выглядит так:
Input a string:
Radar
It's a palindrome
Input another string(y/n)?
y
_ <- this being my cursor after pressing enter 3 times
Я просто пересоберу программу с нуля и попробую сделать это без функции. Я все равно буду благодарен за ссылку на страницу, которая объясняет, как обрабатывать пользовательский ввод с использованием современного c ++.