C 字符串比较

在 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'。这两个函数在字符串排序、搜索和许多其他需要比较字符串的场景中非常有用。

上一篇: C 字符串拼接

下一篇: C 字符串截取

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号