比较字符串时strcmp是如何工作的?

比较字符串时strcmp是如何工作的?,c,strcmp,C,Strcmp,我正在实现一个词典排序,我的教授告诉我们在实现中使用strcmp。问题是,strcmp在如何比较字符串方面非常混乱 例如,这里的结果为false: if (strcmp("What", "am") > 0) { printf("true\n"); } else { printf("false\n"); } “What”在词典学上不应该大于“am”吗?手册页在解释函数如何确定一个字符串大于或小于另一个字符串方面非常简洁。这里有一些问题

我正在实现一个词典排序,我的教授告诉我们在实现中使用strcmp。问题是,
strcmp
在如何比较字符串方面非常混乱

例如,这里的结果为false:

    if (strcmp("What", "am") > 0) {
        printf("true\n");
    } else {
        printf("false\n");
    }

“What”在词典学上不应该大于“am”吗?手册页在解释函数如何确定一个字符串大于或小于另一个字符串方面非常简洁。这里有一些问题,但我仍然无法根据这些解释来确定这个结果。

任何大写字母都比任何小写字母要少。看看ASCII图表和词典比较的定义。

我猜这是因为ASCII表格中“W”在“a”之前。所以“什么”实际上比“am”小。
如果您切换它们,我猜'am'比'What'大。

问题是strcmp进行二进制比较。这一事实使函数区分大小写!ASCII码“W”比ASCII码“a”小

解决这个问题的方法是比较大小写相同的文本字符串

实现这一点的简单方法应为:

#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");
    }

}
#包括
#包括
#包括
char*stoupper(char*s)
{
char*p=s;
而(*p){
*p=toupper(*p);p++
};
返回s;
}
内部主(空)
{
chara[10];
charb[10];
strcpy(a,“什么”);
strcpy(b,“am”);
如果(strcmp(stoupper(a)、stoupper(b))>0){
printf(“true\n”);
}否则{
printf(“假”);
}
}

请记住使用函数stoupper可最终修改字符串中的文本

strcmp以字典形式比较字符的ASCII码。大写字母的ASCII码比小写字母小。