我正在实施词典排序,我的教授告诉我们在实施中使用strcmp
。问题是,strcmp
在如何比较字符串方面非常混乱。
例如,这里产生错误:
if (strcmp("What", "am") > 0) {
printf("true\n");
} else {
printf("false\n");
}
不是"什么"假设大于" am"字典顺序?在解释函数如何确定一个字符串是大于还是小于另一个字符串方面,该手册页非常简洁。这里有一些问题,但我仍然无法根据这些解释确定这个结果。
答案 0 :(得分:2)
问题是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 最终会修改字符串中的文字!
答案 1 :(得分:0)
任何大写字母的比较小于任何小写字母。查看ASCII图表和词典比较的定义。
答案 2 :(得分:0)
我猜这是因为&#39; W&#39;来自&#39; a&#39;在ascii表中。所以&#39;什么&#39;实际上是“小”的而不是&#39;。 如果你切换它们,我猜他们就是&#39;是更大的&#39;而不是&#39;什么&#39;。