【发布时间】:2017-01-14 09:15:05
【问题描述】:
您好,我在课堂上了解了 string.h 库,特别是用于比较字符串的 strcmp 函数。 如果第一个字符串首先出现在字典中,它将返回一个大于 0 的数字,如果第二个字符串大于第一个字符串,它将返回一个小于 0 的数字,如果它们相等,则它应该返回一个 0。 我是这样使用它的:
strcmp(strArr , strrev(strArr));
请随时教育我。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
#define PALINDROM_TRUE 0//because in strcmp if both strings compared are equile the strcmp will return 0.
int main(void)
{
char strArr[MAX_LENGTH];
printf("Enter string (max length 100 chars): ");
fgets(strArr , MAX_LENGTH , stdin);
int pali = strcmp(strArr , strrev(strArr));
if(pali == PALINDROM_TRUE)
{
printf("Palindrom\n");
}
else
{
printf("Not Palindrom\n");
}
system("PAUSE");
return 0;
}
我的问题是,当我输入下面的代码时,即“abc”它会打印到屏幕 Palindrom 它应该打印 Not Palindrom ,它从不打印 不是回文
【问题讨论】:
-
您是否尝试打印出
strArr和strrev(strArr)的值以确保它们具有您期望的值? -
该死的,我设法使 pali 成为 'int' ,对此感到抱歉。
-
您对
strcmp()工作方式的“修复”是一个潜在的混淆源。相反,尝试类似#define strequal(x, y) (strcmp((x), (y)) == 0)然后if (strequal(x, y) == true)... -
这一行:
#define PALINDROM_TRUE 0//because in strcmp if both strings compared are equile the strcmp will return 0.将包含使用宏的注释:PALINDROM_TRUE。这意味着使用该宏的行的其余部分都将被视为注释。强烈建议将评论放在单独的一行 -
在调用
fgets()以从字符串中删除任何(可能的)换行符序列后,发布的代码缺少几行。