C语言字符串比较(2种方法)
在C语言中,字符串比较是一项常见的操作。为了方便进行字符串比较,C标准库提供了两个强大的函数:strcmp 和 strncmp。这两个函数都定义在 string.h 头文件中,它们能够帮助我们轻松地比较两个字符串的内容。
strcmp 函数
strcmp 函数用于比较两个字符串,它的函数原型如下:
int strcmp(const char *str1, const char *str2);
strcmp 函数接受两个参数,分别是要比较的两个字符串的指针。函数会逐个字符地比较这两个字符串,直到遇到不同的字符或者字符串结束符'\0'
。比较的结果通过返回值来表示:
- 如果返回值小于 0,表示 str1 小于 str2
- 如果返回值等于 0,表示 str1 等于 str2
- 如果返回值大于 0,表示 str1 大于 str2
让我们看一个使用 strcmp 的例子:
#include <stdio.h> #include <string.h> int main() { char str1[] = "hello"; char str2[] = "world"; char str3[] = "hello"; int result1 = strcmp(str1, str2); int result2 = strcmp(str1, str3); printf("比较 str1 和 str2:%d\n", result1); printf("比较 str1 和 str3:%d\n", result2); return 0; }
这个程序的输出结果将会是:
比较 str1 和 str2:-15 比较 str1 和 str3:0
在这个例子中,str1 和 str2 的比较结果小于 0,因为 'h' 的 ASCII 值小于 'w'。而 str1 和 str3 的比较结果等于 0,因为它们的内容完全相同。
strncmp 函数
strncmp 函数是 strcmp 的一个变体,它允许我们指定要比较的最大字符数。strncmp 的函数原型如下:
int strncmp(const char *str1, const char *str2, size_t n);
strncmp 函数接受三个参数:前两个参数与 strcmp 相同,第三个参数 n 指定了要比较的最大字符数。函数会比较两个字符串的前 n 个字符,或者直到遇到字符串结束符'\0'
。返回值的含义与 strcmp 相同。
下面是一个使用 strncmp 的例子:
#include <stdio.h> #include <string.h> int main() { char str1[] = "hello world"; char str2[] = "hello there"; char str3[] = "hello"; int result1 = strncmp(str1, str2, 5); int result2 = strncmp(str1, str2, 6); int result3 = strncmp(str1, str3, 5); printf("比较 str1 和 str2 的前 5 个字符:%d\n", result1); printf("比较 str1 和 str2 的前 6 个字符:%d\n", result2); printf("比较 str1 和 str3 的前 5 个字符:%d\n", result3); return 0; }
这个程序的输出结果将会是:
比较 str1 和 str2 的前 5 个字符:0 比较 str1 和 str2 的前 6 个字符:-16 比较 str1 和 str3 的前 5 个字符:0
在这个例子中,我们可以看到 strncmp 只比较指定数量的字符。当比较 str1 和 str2 的前 5 个字符时,结果为 0,因为它们的前 5 个字符都是 "hello"。但是当比较前 6 个字符时,结果小于 0,因为第 6 个字符 ' '(空格)的 ASCII 值小于 't'。
strcmp 和 strncmp 的区别
strcmp 和 strncmp 的主要区别在于比较的范围:
- strcmp 会比较整个字符串,直到遇到字符串结束符或者发现不同的字符。
- strncmp 只比较指定数量的字符,或者直到遇到字符串结束符。
strncmp 在某些情况下特别有用,例如:
- 当我们只需要比较字符串的一部分时;
- 当我们需要比较固定长度的字符数组时;
- 当我们想要避免缓冲区溢出的风险时。
然而,使用 strncmp 时需要注意,如果指定的比较长度超过了字符串的实际长度,可能会导致未定义行为。因此,在使用 strncmp 时,应该确保指定的长度不超过要比较的字符串的实际长度。
注意:对于英文字母,不管是 ctrcmp 还是 strncmp,在比较字符串时都是区分大小写的,如果你不希望区分大小写,请转到:C语言字符串比较(不区分大小写)
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。