C strcspn() 函数

C strcspn() 语法

strcspn() 是 C 语言 <string.h> 标准库的一个函数,用于计算一个字符串开头连续 “不包含” 指定字符集合中的字符的长度。

strcspn() 是 strspn() 函数的 “反向” 操作。换句话说,它查找字符串中第一个属于指定字符集合的字符,并返回该字符之前的子串长度。

语法:

strcspn(str1, str2)

说明:

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

  • str1(const char*):要搜索的字符串的指针。
  • str2(const char*):包含 “拒绝字符集合” 的字符串的指针。strcspn() 函数会查找 str1 开头连续的字符,这些字符都不能包含在 str2 定义的集合中。

strcspn(str1, str2) 会从 str1 的第一个字符开始,逐个检查字符是否 “不属于” str2 中的字符集合。只要当前字符不在 str2 中找到,函数就继续检查 str1 的下一个字符。当遇到 str1 中的字符 “属于” str2 中的字符集合,或者到达 str1 的终止符 '\0' 时,检查才会停止。

strcspn() 函数会返回一个 size_t 类型的值,表示 str1 开头由 “不属于” str2 中字符组成的 “最长连续段的长度” (不包括 str1 中的终止符)。

  • 如果 str1 的第一个字符就属于 str2 的字符集合中,函数返回 0。
  • 如果 str1 中的所有字符都不在 str2 的字符集合中(直到 str1 的终止符),函数返回 str1 的长度。

提示: strcspn 是 “string complement span” 的缩写。

C strcspn() 摘要

使用频率
修改字符串
官方文档 查看
相关函数 strspn()

C strcspn() 示例

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

示例 1:strcspn() 查找字符串开头不包含任何数字的长度

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

int main(void)
{
    const char str[] = "abcde12345";
    const char reject_chars[] = "0123456789";    // 拒绝的字符集合:数字

    size_t length = strcspn(str, reject_chars);
    printf("%zu\n", length);

    return 0;
}

运行结果如下。

5

分析:

在这个例子中,我们尝试使用 strcspn() 来查找字符串 "abcde12345" 开头连续的非数字字符的长度。其中,拒绝字符集合是 "0123456789"。

strcspn() 函数从字符串开头检查,直到遇到第一个数字字符,然后返回之前连续的非数字字符的长度(即 5)。

示例 2:strcspn() 查找字符串开头不包含任何字母的长度

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

int main(void)
{
    const char str[] = "666lvyenet";
    // 拒绝的字符集合:字母(包含大小写)
    const char reject_chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    size_t length = strcspn(str, reject_chars);
    printf("%zu\n", length);

    return 0;
}

运行结果如下。

3

分析:

在这个例子中,我们尝试使用 strcspn() 来查找字符串 "666lvyenet" 开头连续的非字母字符的长度。其中,拒绝字符集合是所有大小写字母。strcspn() 函数检查到第一个字母字符 'l' 时会停止,然后返回之前连续的非字母长度(即 3)。

示例 3:字符串开头包含拒绝字符

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

int main(void)
{
    const char str[] = ",lvyenet";
    const char reject_chars[] = ",.;:";     // 拒绝的字符集合:标点符号

    size_t length = strcspn(str, reject_chars);
    printf("%zu\n", length);

    return 0;
}

运行结果如下。

0

分析:

由于字符串 ",lvyenet" 的第一个字符是逗号 ',',它属于拒绝字符集合 ",.;:" 中,因此 strcspn() 返回 0。

示例 4:整个字符串都不包含拒绝字符

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

int main(void)
{
    const char str[] = "lvyenet";
    const char reject_chars[] = "0123456789"; // 拒绝的字符集合:数字

    size_t length = strcspn(str, reject_chars);
    printf("%zu\n", length);

    return 0;
}

运行结果如下。

7

分析:

当字符串的所有字符都不包含在拒绝字符集合中时,strcspn() 会遍历整个字符串直到终止符 '\0',并返回字符串的长度。

strcspn() 与 strspn() 的区别

strcspn() 和 strspn() 是一对功能相反的 “好基友”,它们之间的区别如下。

  • strspn():查找第一个 “不属于” 指定集合的字符。
  • strcspn():查找第一个 “属于” 指定集合的字符。

上一篇: strspn()

下一篇: memcpy()

给站长反馈

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

邮箱:lvyenet@vip.qq.com

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