#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getSentence(char userSentence[]);
int breakSentence_andCompare(char userSentence[] , char compareSentence[]);
#define MAX_SENTENCE 100
int main()
{
int len = 0;
char userSentence[MAX_SENTENCE] = {'o','k',0};
char compareSentence[MAX_SENTENCE] = {'o',0};
getSentence(userSentence);
len = breakSentence_andCompare(userSentence,compareSentence);
}
/*
This function is asking the user to input info.
input:user input string array - char userSentence[].
output:none.
*/
void getSentence(char userSentence[])
{
printf("Hello And Welcome To The Palindrome Cheker Made By xXTH3 SKIRT CH4S3RXx");
printf("\nPlease Enter A Sentence: ");
fgets(userSentence,MAX_SENTENCE,stdin);
}
/*
This function takes the input of the user and input it into another string backwards.
input:user input string array - char userSentence[], backward user input string array - char compareSentence[].
output:strcmp value.
*/
int breakSentence_andCompare(char userSentence[] , char compareSentence[])
{
int i = 0;
int z = 0;
int len = 0;
int cmp = 0;
len = strlen(userSentence);
len -= 1;
for (i = len ; i >= 0 ; i--)
{
compareSentence[z] = userSentence[i];
printf("%s",compareSentence);
z++;
}
printf("\nuser: %s! compare: %s!",userSentence,compareSentence);
cmp = strcmp(userSentence,compareSentence);
printf("\n%d",&cmp);
return cmp;
}
该程序检查输入的字符串是否为回文, 简单解释一下它是如何工作的:
我在函数中有一个非常奇怪的问题,那就是strcmp
返回值。出于某种原因,当两个字符串具有相同的字符(如ABBA)时,strcmp将返回其中一个字符串的值更大。我真的很想知道这是什么问题,我该如何解决它。
P.S
当我在搜索问题时,我认为可能与用户输入字符串可能包含来自回车键的\n
的事实有关;那可能吗?
请理解这不是一个完整的代码。代码缺少输出部分。
答案 0 :(得分:4)
由于用户输入字符串中有\n
(换行符)字符,因此出现问题。
fgets()函数应从流中读取字节到数组中 s指向,直到读取n-1个字节,或读取 a 并转移到s ,或遇到文件结束条件。 然后以空字节终止该字符串。 [EMPHASIS MINE]
因此,换行符会使fgets
停止读取,但它被函数视为有效字符并包含在输入字符串中。
说,用户输入字符串是“ABBA”。因此,在输入输入后,userSentence
的内容将为“ABBA \ n”。
在你的程序中,你正在反转输入字符串并将其与原始输入字符串进行比较。
倒车后,compareSentence
的内容将为“\ nABBA”。
两个字符串的内容不相同,strcmp()
将返回非零值作为比较结果。
有多种方法可以从\n
输入中删除尾随fgets()
(换行符)字符。检查this。
由于您是初学者,所以向您提出一个建议 - 不要忽略编译器警告('s)。
声明 -
printf("\n%d",&cmp);
您必须在编译程序时收到警告消息。
您应该尝试找出警告信息的原因(并且应该解决它们。
)有更好的方法可以找出字符串是否是回文,但由于你是初学者,你的开始是好的。快乐学习.. :)