我正在实现字典排序,我的教授告诉我们在实现中使用strcmp
。问题是,strcmp 在比较字符串的方式方面非常令人困惑。
例如,这里会产生 false:
if (strcmp("What", "am") > 0) {
printf("true\n");
} else {
printf("false\n");
}
按字典顺序,“What”不应该大于“am”吗?手册页非常简洁地解释了函数如何确定一个字符串是否大于或小于另一个字符串。这里有一些问题,但我仍然无法根据这些解释确定这个结果。
最佳答案
问题是 strcmp 进行了二进制比较。这一事实使得函数区分大小写! “W”的 ASCII 码小于“a”的 ASCII 码。
解决问题的方法是比较大小写相同的文本字符串。
获得此信息的简单方法是:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char* stoupper( char* s )
{
char* p = s;
while (*p) {
*p= toupper( *p ); p++
};
return s;
}
int main(void)
{
char a[10];
char b[10];
strcpy(a,"What");
strcpy(b,"am");
if (strcmp(stoupper(a), stoupper(b)) > 0) {
printf("true\n");
} else {
printf("false\n");
}
}
记住,使用函数stoupper会明确修改字符串中的文本!
关于c - 比较字符串时 strcmp 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29586326/