C strcmp() 函数

C strcmp() 语法

strcmp() 是 C 语言 <string.h> 标准库的一个函数,它用于比较两个字符串的大小。

语法:

strcmp(str1, str2)

说明:

strcmp() 函数接收以下 2 个参数。

  • str1(const char*):第 1 个字符串的指针。
  • str2(const char*):第 2 个字符串的指针。

strcmp() 函数会返回一个整数,以表示比较结果。

  • 如果 str1 小于 str2,则返回一个 “负数” 。
  • 如果 str1 等于 str2,则返回 “0” 。
  • 如果 str1 大于 str2,则返回一个 “正数” 。

提示: strcmp 是 “string compare” 的缩写。

C strcmp() 摘要

使用频率
修改字符串
官方文档 查看

C strcmp() 示例

接下来,我们通过几个简单的例子来讲解一下 C strcmp() 函数是如何使用的。

示例 1:strcmp() 比较两个字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1[] = "abcde";
    char str2[] = "abxde";

    int result = strcmp(str1, str2);
    printf("%d", result);

    return 0;
}

运行结果如下。

-21

分析:

strcmp(str1, str2) 返回了一个负数(-21),不同编译器可能会返回 -1,但意义相同,都是表示 str1 小于 str2。

这里小伙伴就肯定就会疑问:“对两个字符串进行大小比较,它们究竟是比较些什么呢?”

如果对两个字符串进行大小比较,strcmp() 其实就是从它们的首个字符开始一一对比,直到出现第一个不同的字符为止。接着我们就对比这两个不同字符的 “ASCII 码” 大小。ASCII 码较大的,就表示该字符串较大。

上面这个例子中的 str1 和 str2,它们前 2 个字符是相同的,这里还没有 “分出胜负”。到了第 3 个字符,'c' 的 ASCII 码是 99,而 'x' 的ASCII 码是 120,因此判定 str1 小于 str2。接下来后面部分,就不需要再去比较了。

示例 2:strcmp() 比较长度不同的字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1[] = "abcde";
    char str2[] = "abc";

    int result = strcmp(str1, str2);
    printf("%d", result);

    return 0;
}

运行结果如下。

100

分析:

strcmp(str1, str2) 返回 100,也就表示字符串 str1 大于字符串 str2。对于这个例子来说,str1 和 str2 的前 3 个字符是相同的,此时两者还没有 “分出胜负”。但是 str2 只有 3 个字符,而 str1 却有更多字符,此时 str1 比 str2 “更胜一筹”。

示例 3:strcmp() 比较包含大小写字母的字符串

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str1[] = "Hello";
    char str2[] = "hello";

    int result = strcmp(str1, str2);
    printf("%d", result);

    return 0;
}

运行结果如下。

-32

分析:

strcmp() 是区分大小写的。 'H' 的 ASCII 值与 'h' 的 ASCII 值不同,因此这两个字符串被认为不相等。

strcmp() 的应用场景

在实际开发中,strcmp() 函数主要应用于以下几种场景。

  • 判断两个字符串是否相等(最常用)。
  • 对字符串进行排序。
  • 在字符串数组中查找特定的字符串。
  • 数据结构操作(比如二叉搜索树)。

如果需要进行不区分大小写的字符串比较,我们可以使用 strcasecmp() 函数(这是一个非标准的 POSIX 函数,但在许多系统中都是可用的),或者先将字符串转换为相同大小写后再使用 strcmp()。

上一篇: strncat()

下一篇: strncmp()

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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