strcmp函数
strcmp函数是C标准库中用于比较两个字符串的函数。它的原型定义在string.h头文件中
函数原型:
int strcmp(const char *str1, const char *str2);
- str1 和 str2 是两个要比较的字符串。
- 返回值为整数类型:
- 如果返回值为0,表示两个字符串相等。
- 如果返回值小于0,表示str1小于str2。
- 如果返回值大于0,表示str1大于str2。
用法:
#include <stdio.h>
#include <string.h> int main() { const char *str1 = "Hello"; const char *str2 = "Hello"; const char *str3 = "World"; // 比较 str1 和 str2 if (strcmp(str1, str2) == 0) { printf("str1 和 str2 相同。\n"); } else { printf("str1 和 str2 不相同。\n"); } // 比较 str1 和 str3 if (strcmp(str1, str3) == 0){ printf("str1 和 str3 相同。\n"); } else { printf("str1 和 str3 不相同。\n"); } return 0;
}
输出:
str1 和 str2 相同。
str1 和 str3 不相同。
注意事项
- 字符串结束标志:确保传入的字符串是以 null 结尾的(也就是
\0
),否则strcmp()
的行为是未定义的。 - 区分大小写:
strcmp()
是区分大小写的,如果你希望不区分大小写地比较字符串,可以使用strcasecmp()
(在一些系统中)或根据需要自定义函数。
例:
#include <stdio.h>
#include <string.h>
#include <ctype.h> int str_case_cmp(const char *str1, const char *str2) { while (*str1 && *str2) { if (tolower((unsigned char)*str1) != tolower((unsigned char)*str2)) { return *(unsigned char *)str1 - *(unsigned char *)str2; } str1++; str2++; } return *(unsigned char *)str1 - *(unsigned char *)str2;
} int main() { const char *str1 = "Hello"; const char *str2 = "hello"; if (str_case_cmp(str1, str2) == 0) { printf("str1 和 str2 相同(忽略大小写)。\n"); } else { printf("str1 和 str2 不相同(忽略大小写)。\n"); } return 0;
}
这个自定义的 str_case_cmp
函数可以用来比较两个字符串时忽略大小写。
在 C 语言中,使用 strcmp()
是比较两个字符串的标准方法。如果需要忽略大小写,可以使用 strcasecmp()
或实现自定义的比较函数。确保字符串是以 null 结尾的,以避免未定义行为。
手动实现字符串比较
#include <stdio.h>
int my_strcmp(const char *str1, const char *str2) {while (*str1 && (*str1 == *str2)) {str1++;str2++;}return *(unsigned char *)str1 - *(unsigned char *)str2;//如果相等返回0
}int main() {char str1[] = "hello"char str2[] = "hello"char str3[] = "world";if (my_strcmp(str1, str2) == 0) {printf("str1 and str2 are equal.n");} else {printf("str1 and str2 are not equal.n");}if (my_strcmp(str1, str3) == 0) {printf("str1 and str3 are equal.n");}else {printf("str1 and str3 are not equal.n");}return 0}
最常用的方法是使用strcmp函数,因为它简单且高效。手动实现字符串比较或使用指针进行比较可以帮助我们更好地理解字符串操作的底层原理。