#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int i,l,count=0;
char str[100];
printf("Enter a string\n");
scanf("%[^\n]", str);
l=strlen(str);
printf("%d\n", l);
for(i=0;i<=l/2;i++)
{
if(str[i]==str[l-i])
count++;
else
continue;
}
printf("%d", count);
if(count==l/2)
printf("the string is pallindrome");
else
printf("\nNOt pallindrome");
return 0;
}
答案 0 :(得分:0)
如果我将此行添加到您的for
循环中:
printf("str[i]=%.2X\tstr[l-i]=%.2X\n", str[i], str[l-i]);
使用输入racecar
(是回文),我看到输出:
str[i]=72 str[l-i]=00
str[i]=61 str[l-i]=72
str[i]=63 str[l-i]=61
str[i]=65 str[l-i]=63
您正在将空终止符与字符串的实际内容进行比较,这是不正确的。另外,continue
将结束循环的当前迭代,然后更新i
和 keep循环,一旦遇到比较失败,这将不是您想要的。您希望在那里有一个break
。更好的是,将代码包含在自己的函数中,这样您就可以在失败时返回,如下所示:
int palin(char *a, size_t len)
{
char *p = &a[0];
char *q = &a[len - 1];
while(p < q)
{
if(*p != *q) return 0;
p++;
q--;
}
return 1;
}