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

标签 c strcmp

我正在实现字典排序,我的教授告诉我们在实现中使用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/

相关文章:

c - 我无法将 char 作为字符串访问

将 strdup 函数的返回值与 strncmp 进行比较

c - strcmp 无法正确比较字符串

在 C 中将输入字符串与具有整数变量的字符串进行比较?

c - 在 C 中访问数组

c - 替代 container_of()

c - 动态地将文件中的文本读入字符串并删除c中的奇数字符

c - C 中数组的元素在创建数组后初始化为什么?

c - C中指针(*)的不同用法

c++ - strcmp() 的问题没有正确比较字符串