-1
#include <iostream>
#include <cstring>
#include <string>
#include <ctype.h>
using namespace std;
//declare methods
void transform(char *, char *);
bool testPalindrome(char *);
int main()
{
//declare c-strings and a boolean variable
char str[80];
char myStr[100];
char defaultValue[] = "0";
bool done = true;
//continously ask a user to enter a string until the user enters 0
while (done)
{
cout << "Enter a string (0 to exit the program): ";
cin.getline(str, 80);
if (strcmp(str,defaultValue) == 0)
{
done = false;
}
else
{
//convert all lowercase letters of user input to uppercase
transform(str, myStr);
//test if user input is the same when read backward and forward
if (testPalindrome(myStr))
{
cout << "It is a palindrome." << endl;
}
else
{
cout << "It is not a palindrome." << endl;
}
}
}
system("pause");
return 0;
}
/*
This method converts all lowercase letters into uppercase letters
as well as removes characters that are not numbers or letters.
The new string will be stored in the C-string testStr
*/
void transform(char * raw, char * testStr)
{
int length = strlen(raw);
int j = 0;
//convert all lowercase letters to uppercase letters if current letter is lowercase
for(int i = 0; i < length; i++)
{
if (islower(raw[i]))
{
raw[i] = toupper(raw[i]);
}
}
//copy user input, remove all characters that are letters or numbers
for (int k = 0; k < length; k++)
{
if ((isalpha(raw[k]) || isdigit(raw[k])))
{
*(testStr + k) = *(raw + k);
}
else if (isspace(raw[k]))
{
const char * current = &raw[k];
remove(current);
}
j++;
}
*(testStr + j) = '\0';
}
/*
This method determines if the user input can be read the same backward or forward.
will take a parameter of a pointer variable, which refers to
memory address of the c-string
*/
bool testPalindrome(char * str)
{
int test = 1;
bool flag = true;
int length = strlen(str) - 1;
int n = length;
for (int i = 0; i <= length && n >= 0; i++, n--)
{
if (toupper(str[i]) == toupper(str[n]))
{
flag = true;
}
else
{
flag = false;
}
}
return flag;
}
이 프로그램에서는 사용자 입력이 회문인지 여부를 표시하려고합니다. 나는 시험에 5 문자열을 제공하고있다 :사용자 입력이 회문인지 확인
레이더
야유 너무 뜨거운
부인 나는 남자, 설계도하는 아담
해요 운하 파나마
!의사, 메모, 반대! 금식은 결코 비만을 예방하지 않습니다. 대구 식단 다이어트
어떤 이유로 든 내 프로그램에서 5 가지 경우 중 4 가지를 전달합니다. 또한, 나는 비 회문을 테스트했고 그것은 정상적으로 작동하는 것 같습니다. 다른 캐릭터가 예상 결과를 제공하면서
이미지에 보이는 바와 같이는 문자열 "A man, A plan, A canal-Panama"
는 반대 결과를 제공한다 : 다음 이미지 5 문자열 인 사용자 입력의 결과를 나타낸다. 내 코드에서이 문제의 원인은 어디입니까? 조언 및/또는 건설적인 비판이 실제로 도움이 될 것입니다.
이 디버깅을 시도하고 디버깅하기 위해 수행 한 작업은 무엇입니까? 예 : 디버거 단계별, 중간 결과 출력 등 ...? –