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

时间:2015-04-12 05:35:58

标签: c strcmp

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

例如,这里产生错误:

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

不是"什么"假设大于" am"字典顺序?在解释函数如何确定一个字符串是大于还是小于另一个字符串方面,该手册页非常简洁。这里有一些问题,但我仍然无法根据这些解释确定这个结果。

3 个答案:

答案 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;。