C语言如何比较两个字符串大小?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 C语言 正文

使用标准库函数 strcmp()

最简单和推荐的方法是使用 <string.h> 中的 strcmp() 函数。

c语言比较两个字符串的大小
(图片来源网络,侵删)

函数原型

int strcmp(const char *str1, const char *str2);

返回值

  • > 0str1 大于 str2(字典序靠后)
  • = 0str1 等于 str2
  • < 0str1 小于 str2(字典序靠前)

示例代码

#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    int result = strcmp(str1, str2);
    if (result > 0) {
        printf("\"%s\" 大于 \"%s\"\n", str1, str2);
    } else if (result < 0) {
        printf("\"%s\" 小于 \"%s\"\n", str1, str2);
    } else {
        printf("\"%s\" 等于 \"%s\"\n", str1, str2);
    }
    return 0;
}

输出

"apple" 小于 "banana"

手动实现字符串比较

如果不允许使用 strcmp(),可以手动遍历字符串逐个字符比较。

逻辑

  1. 同时遍历两个字符串,逐个字符比较其 ASCII 码值。
  2. 如果遇到第一个不同的字符:
    • str1 的字符 ASCII 码更大,则 str1 更大。
    • str2 的字符 ASCII 码更大,则 str2 更大。
  3. 如果所有字符都相同,但长度不同:
    • 较长的字符串更大(除非是前缀关系,如 "apple""apples")。

示例代码

#include <stdio.h>
int my_strcmp(const char *str1, const char *str2) {
    while (*str1 && (*str1 == *str2)) {
        str1++;
        str2++;
    }
    return *(const unsigned char *)str1 - *(const unsigned char *)str2;
}
int main() {
    char str1[] = "hello";
    char str2[] = "world";
    int result = my_strcmp(str1, str2);
    if (result > 0) {
        printf("\"%s\" 大于 \"%s\"\n", str1, str2);
    } else if (result < 0) {
        printf("\"%s\" 小于 \"%%s\"\n", str1, str2);
    } else {
        printf("\"%s\" 等于 \"%s\"\n", str1, str2);
    }
    return 0;
}

输出

"hello" 小于 "world"

大小写不敏感的比较

如果希望忽略大小写(如 "Apple""apple" 视为相等),可以使用 strcasecmp()(非标准,但常见于 Linux/macOS)或自定义函数。

c语言比较两个字符串的大小
(图片来源网络,侵删)

示例(Linux/macOS)

#include <stdio.h>
#include <strings.h> // 包含 strcasecmp()
int main() {
    char str1[] = "Apple";
    char str2[] = "apple";
    int result = strcasecmp(str1, str2);
    if (result == 0) {
        printf("字符串相等(忽略大小写)\n");
    } else {
        printf("字符串不相等\n");
    }
    return 0;
}

跨平台实现(手动)

#include <stdio.h>
#include <ctype.h> // 用于 tolower()
int case_insensitive_strcmp(const char *str1, const char *str2) {
    while (*str1 && *str2) {
        char c1 = tolower((unsigned char)*str1);
        char c2 = tolower((unsigned char)*str2);
        if (c1 != c2) {
            return c1 - c2;
        }
        str1++;
        str2++;
    }
    return *str1 - *str2;
}

方法 特点 适用场景
strcmp() 标准库函数,高效可靠 大多数情况,推荐使用
手动实现 不依赖库,适合学习或特殊需求 面试、嵌入式环境或自定义逻辑
strcasecmp() 忽略大小写 需要不区分大小写的比较时

根据需求选择合适的方法,优先使用标准库函数以保证代码的可读性和稳定性。

c语言比较两个字符串的大小
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
织梦医院综合模板如何适配不同科室需求?
« 上一篇 03-06
dede发布人如何修改?
下一篇 » 03-06
取消
微信二维码
支付宝二维码

目录[+]