在 C 语言中,如果想要比较 2 个字符串,我们可以使用以下 2 个函数来实现。
- strcmp()
- strncmp()
使用 strcmp() 比较字符串
在 C 语言中,我们可以使用 strcmp() 函数来比较两个字符串的大小。其中,strcmp 是 “string compare(字符串比较)” 的缩写。
语法:
strcmp(str1, str2);说明:
strcmp() 会返回一个值,根据返回值是否小于 0,我们可以判断 str1 和 str2 的大小。
- 如果值小于 0,表示 str1 小于 str2。
- 如果值等于 0,表示 str1 等于 str2。
- 如果值大于 0,表示 str1 大于 str2。
示例 1:strcmp() 比较两个字符串大小
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[] = "abcde";
char b[] = "abxde";
printf("%d", strcmp(a, b));
return 0;
}运行结果如下。
-21分析:
由于 strcmp(a, b) 返回 -21,也就表示字符串 a 小于字符串 b。这里小伙伴就肯定有疑问了:“对两个字符串进行大小比较,它们究竟是比较些什么?”
如果对两个字符串进行大小比较,strcmp() 其实就是从它们的首个字符开始一一对比,直到出现第一个不同的字符,我们就对比这两个字符的 “ASCII 码” 的大小。ASCII 码较大的,就表示该字符串较大。
比如上面这个例子中的 a 和 b,它们前 2 个字符是相同的,这里还没有比较出 “胜负”。到了第 3 个字符,'c' 的 ASCII 码肯定比 'x' 的 ASCII 码小,所以也就代表 a 比 b 小。接下来后面部分,就不需要再去比较了。
注意: strcmp 的返回值具体是多少取决于编译器,标准只规定大于、小于或等于 0。有的编译器返回 -1,有的返回 ASCII 差值(如 -21),但我们在判断时只需要看它是否小于 0 即可。
使用 strncmp() 比较字符串
在 C 语言中,我们还可以使用 strncmp() 函数来比较两个字符串的大小。其中,strncmp 是 “string n compare” 的缩写。
与 strcmp() 函数不同,strncmp() 函数只会比较前 n 个字符。
语法:
strncmp(str1, str2, n);说明:
strncmp() 会返回一个值,根据返回值是否小于 0,我们可以判断 str1 和 str2 的大小。
- 如果值小于 0,表示 str1 小于 str2。
- 如果值等于 0,表示 str1 等于 str2。
- 如果值大于 0,表示 str1 大于 str2。
示例 2:strncmp() 比较两个字符串大小
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[] = "abcde";
char str2[] = "abxde";
int result = strncmp(str1, str2, 3);
printf("%d", result);
return 0;
}运行结果如下。
-21分析:
在上面例子中,str1 和 str2,它们前 2 个字符是相同的,这里还没有 “分出胜负”。到了第 3 个字符,'c' 的 ASCII 码肯定比 'x' 的 ASCII 码小,所以也就代表 str1 比 str2 小。
对于上面例子来说,如果我们把 strncmp(str1, str2, 3) 修改为 strncmp(str1, str2, 2),此时返回的结果就是 0,小伙伴们可以思考一下为什么。
strcmp() 和 strncmp() 函数在比较字符串时,都会逐个比较字符的数值大小(通常是 ASCII 值或其扩展编码的值),直到遇到不同的字符、比较完指定数量的字符(对于 strncmp()),或者遇到字符串的空终止符 '\0'。这两个函数在字符串排序、搜索和许多其他需要比较字符串的场景中非常有用。
