所以我正在制作一个程序,检查一个单词是否是回文,但是当结束比较最后的字符串时,即使它们是相同的,我得到-1结果编辑:复制粘贴我使用的完全相同的代码
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{
char input[50];
char test[50];
int ret;
printf("Enter word or phrase to compare ");
fgets(input,sizeof(input),stdin);
strcpy(test,input);
strrev(input);
ret = strcmp(test,input);
if(ret == 0)
printf("\n this is a palindrome ");
else
printf("\n this is not a palindrome");
}
对于输入我使用“ala”,我知道是一个回文,我得到了结果
this is not a palindrome
答案 0 :(得分:1)
问题是,您调用strrev
时不会从fgets
获取的输入中删除换行符。这会导致您的反向字符串在字符串的开头有newline
,即使您打算提供回文作为输入,也会导致不匹配。
虽然有多种方法可以实现这一点,但一种方法是查看输入的最后一个字节,看看它是否是换行符。如果是,请将其删除。
if (fgets(input,sizeof(input),stdin) == NULL) {
/* todo: ... handle error ... */
return 0;
}
len = strlen(input);
if (input[len-1] == '\n') input[--len] = '\0';
strcpy(test,input);