找出给定的字符串是回文还是不是回文

fud*_*din 3 c

我做了一个程序来查找输入的字符串是否是回文序列,但它总是说它不是回文结构

#include <conio.h> 
#include <graphics.h> 
#include <string.h>
void main(void)
{
    int i,len,halflen,flag=1;
    char str[50];
    clrscr();
    printf("Enter a string:\n");
    gets(str);
    len=strlen(str);
    halflen=len/2;
    for(i=0;i<halflen;i++)
    {
        if(str[i]!=str[i+halflen])
            flag=0;
        break;

    }
    if(flag)
        printf("It is a Palindrome.");
    else
        printf("It is not a Palindrome.");
    getch();
}
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 10

你的中心比较是有缺陷的:

if (str[i] != str[i+halflen]) 
Run Code Online (Sandbox Code Playgroud)

这不是比较你认为的两个字符.

尝试在你的程序中输入"HelloHello",它会说它是一个回文!

你需要比较这两个:

if (str[i] != str[len-i-1])
Run Code Online (Sandbox Code Playgroud)

(并修复大括号,如另一个答案所示)

  • 那应该是`if(str [i]!= str [len-1-i])`,如果你不加-1,它会将第一个字符与最后的'\ 0'进行比较,但是会失败除了空字符串外. (4认同)

Wil*_*ill 6

为了给你一个线索,我已经做了一些更整洁的代码缩进:

for(i=0;i<halflen;i++)
    {
        if(str[i]!=str[i+halflen])
            flag=0;
        break;
    }
Run Code Online (Sandbox Code Playgroud)

  • 这就是为什么灰胡子在任何地方使用括号,即使有些人可能认为他们不需要它们. (5认同)
  • 这是一个问题,但不是整个问题 (2认同)