我想知道为什么结果不正确。如果我键入字符串来测试该字符串是否为回文,每当我尝试时,结果都是一样的。
例如,如果我输入“爸爸”进行测试,这表明它不是回文。但是,如果我输入“god”,它仍然告诉我这不是回文。
我不知道如何以正确的方式解决这个问题......请让我知道我该怎么做。
谢谢。
(下面的代码)
#include <stdio.h>
#include <string.h>
void isPalindrome(char *str, int n);
int main() {
char str[100];
int n = strlen(str);
char choice;
printf("Will you run this program? : ");
scanf("%c", &choice);
getchar();
while (choice == 'Y' || choice == 'y') {
isPalindrome(str, n);
printf("Retry? : ");
scanf("%c", &choice);
getchar();
}
}
void isPalindrome(char *str, int n) {
int flag = 1;
printf("Type strings : ");
gets_s(str, 100);
for (int i = 0; i < n / 2; i++) {
if ('A' <= str[i] && str[i] <= 'Z') {
str[i] = str[i] - 'A' + 'a';
}
if (strlen(str) / 2 == 0) {
if (str[i] != str[n - i - 1]) {
flag = 0;
break;
}
} else
if (strlen(str) / 2 != 0) {
if (str[i] != str[n - i]) {
flag = 0;
break;
}
}
}
if (flag == 1) {
printf("%s is a palindrome \n", str);
} else {
printf("%s is not a palindrome \n", str);
}
}
对于根据 C 标准的启动器,不带参数的函数 main 应声明如下
int main( void )
isPalindrome
函数应该只做一件事——检查提供的字符串是否为回文。所有输入都应该在 main 中完成。
此外,由于该函数不会更改字符串本身,因此应使用限定符 const
声明其相应的参数。
该函数的返回类型应为int
或_Bool
。
main 中的第二个语句
char str[100];
int n = strlen(str);
没有意义,因为数组 str
不包含任何字符串。此外,变量 n
的类型应为 size_T
,因为它是函数 strlen
的返回类型。
而不是这些操作
if ('A' <= str[i] && str[i] <= 'Z')
{
str[i] = str[i] - 'A' + 'a';
}
使用标准函数tolower
要好得多,而且你必须同时转换字符串的两个符号。
程序看起来像下面这样。
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 100
int isPalindrome(const char s[], size_t n)
{
size_t i = 0;
while (i < n / 2 &&
tolower((unsigned char)s[i]) == tolower((unsigned char)s[n - i - 1])) ++i;
return i == n / 2;
}
int main( void )
{
char choice;
printf( "Will you run this program? : " );
scanf( " %c", &choice );
getchar();
while ( choice == 'Y' || choice == 'y' )
{
char s[N];
printf( "Type a string : " );
gets_s( s, N );
if ( isPalindrome( s, strlen( s ) ) )
{
printf( "\"%s\" is a palindrome\n", s );
}
else
{
printf("\"%s\" is not a palindrome\n", s);
}
printf( "Retry? : " );
scanf( " %c", &choice );
getchar();
}
return 0;
}
程序输出可能是这样的
Will you run this program? : y
Type a string : dad
"dad" is a palindrome
Retry? : y
Type a string : god
"god" is not a palindrome
Retry? : n
我是一名优秀的程序员,十分优秀!