我想看看一个词/短语是否是回文。我必须使用 fgets 而不是 gets 等...with gets 我的代码有效,但 fgets 无效。谁知道为什么?
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int i,j,len;
char str[100];
printf("Enter the string: \n");
fgets(str,sizeof(str),stdin);
len=strlen(str);
for(i=0;i<=len;i++)
str[i]=tolower(str[i]);
for(i=0,j=len-1;i<j;i++,j--) {
while (str[i]==' ') i++;
while (str[j]==' ') j--;
if( str[i] != str[j] ) {
printf("NO\n");
return 0;
}
}
printf("YES\n");
return 0;
}
这不适用于 fgets
,因为它将尾部 \n
保留在字符串中; gets
不会那样做。
来自documentation :
A newline character makes fgets stop reading, but it is considered a valid character by the function and included in the string copied to str.
要解决此问题,请调整长度以考虑尾随 \n
标记:转到字符串的末尾,然后向后移动,直到看到非 \n
字符。
我是一名优秀的程序员,十分优秀!