我在C中输出格式有问题。 请参阅下面的图片了解我的输出
我希望我的输出如下
输入字词:KayaK
皮划艇是一个回文。
// palindrome.c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAXLEN 20
int isPalindrome(char [], int);
int main(void) {
char word[MAXLEN+1];
int size;
printf("Enter word: ");
fgets(word,MAXLEN+1,stdin);
size = strlen(word);
if (isPalindrome(word, size-1)) //size - 1 because strlen includes \0
{
printf("%s is a palindrome.\n",word);
}
else
{
printf("%s is not a palindrome.\n",word);
}
return 0;
}
int isPalindrome(char str[], int size) {
int i;
for (i = 0; i < size; i++)
{
if (tolower(str[i]) != tolower(str[size - i - 1]))
{
return 0;
}
}
return 1;
}
答案 0 :(得分:8)
fgets
读取字符串,包括终止换行符。只需在进一步处理之前将其剥离。
请注意,在传递size-1
时,实际上考虑到了这一点,但出于错误的原因。它包括\n
,而不是\0
。
答案 1 :(得分:1)
您的代码会掩盖包含行尾标记的原始字符串的问题:
此行剔除尾随零
if (isPalindrome(word, size-1)) //size - 1 because strlen includes \0
注释错误,顺便说一句:strlen
不包含\0
,其中包含\n
。
此行忽略尾随\n
,因为size - i - 1
再次减去1
,即使您在第一次调用该函数时已将其减去:
if (tolower(str[i]) != tolower(str[size - i - 1]))
你应该这样做:
size--;
word[size] = '\0';
if (isPalindrome(word, size-1)) //size - 1 because strlen includes \0
现在您可以按照以下方式更正您的回文检查器:
if (tolower(str[i]) != tolower(str[size - i])) // No "minus one"
{
return 0;
}
答案 2 :(得分:0)
剥离它意味着将其从字符串中删除。
//...
printf("Enter word: ");
fgets(word,MAXLEN+1,stdin);
size = strlen(word);
word[size-1] = '\0'
//program