gpt4 book ai didi

c - 回文 - 仅限 C 语言

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:31 27 4
gpt4 key购买 nike

我想知道为什么结果不正确。如果我键入字符串来测试该字符串是否为回文,每当我尝试时,结果都是一样的。

例如,如果我输入“爸爸”进行测试,这表明它不是回文。但是,如果我输入“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

关于c - 回文 - 仅限 C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500670/

27 4 0