【问题标题】:How does strcmp work when comparing strings?strcmp 在比较字符串时如何工作?
【发布时间】:2015-04-12 05:35:57
【问题描述】:

我正在实现一个字典排序,我的教授告诉我们在我们的实现中使用strcmp。问题是,strcmp 在比较字符串方面非常令人困惑。

例如,这里会产生错误:

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

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

【问题讨论】:

  • strcmp 按字典顺序比较字符的 ASCII 码。大写字母的 ASCII 码小于小写字母。

标签: c strcmp


【解决方案1】:

问题在于 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的使用会明确地修改字符串中的文本!

【讨论】:

    【解决方案2】:

    任何大写字母都小于任何小写字母。看一个ASCII图表和字典比较的定义。

    【讨论】:

      【解决方案3】:

      我的猜测是,这是因为在 ascii 表中,'W' 出现在 'a' 之前。所以“什么”实际上比“我”“更小”。 如果你切换它们,我猜 'am' 比 'What' 'greater'。

      【讨论】:

        猜你喜欢
        • 2019-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 2019-06-19
        • 2013-03-12
        • 1970-01-01
        相关资源
        最近更新 更多