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():查找第一个 “属于” 指定集合的字符。
