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

(图片来源网络,侵删)
函数原型
int strcmp(const char *str1, const char *str2);
返回值
> 0:str1大于str2(字典序靠后)= 0:str1等于str2< 0:str1小于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(),可以手动遍历字符串逐个字符比较。
逻辑
- 同时遍历两个字符串,逐个字符比较其 ASCII 码值。
- 如果遇到第一个不同的字符:
- 若
str1的字符 ASCII 码更大,则str1更大。 - 若
str2的字符 ASCII 码更大,则str2更大。
- 若
- 如果所有字符都相同,但长度不同:
- 较长的字符串更大(除非是前缀关系,如
"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)或自定义函数。

(图片来源网络,侵删)
示例(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() |
忽略大小写 | 需要不区分大小写的比较时 |
根据需求选择合适的方法,优先使用标准库函数以保证代码的可读性和稳定性。

(图片来源网络,侵删)
