简述strspn()和strcspn()函数的用法

· · 个人记录

rt,strspn()strcspn()的用法实际上存在许多相似之处。让我们先从strspn()开始。

A. strspn()

1.功能

从一个字符数组的首位开始,检测这个字符数组最前端有多少位字符都出现在了另一个字符数组中,返回这一位数。

好难理解,看看示例就懂了

2.使用格式:

下面是strspn()函数在cplusplus.net中的定义:(详细网址见下)

size_t strspn ( const char * str1, const char * str2 );
注:其中size_t为无符号的整数型变量.

括号内为两个字符数组,其中str1为被从头查找的字符数组,str2为另一个字符数组(充当字典)。

如果str1中的所有字符都在str2中出现过,则strspn(str1, str2)将会直接返回str1的长度;如果str1的第一个字符就不在str2中,strspn(str1, str2)将会返回0

3.示例

下面是一个例子:

#include <cstdio>
#include <cstring>
using namespace std;

char str1[] = "128XYZABC";
char str2[] = "0123456789X";
int main()
{
    int a = strspn(str1, str2);
    printf("%d", a);
    return 0;
}

这个程序会输出4。

B. strcspn()

5.功能

从一个字符数组的首位开始,依次向后检测这个字符数组中第一次出现另一个字符数组中的字符的位置,返回这一位置在数组中的下标。

6.使用格式:

下面是strcspn()函数在cplusplus.net中的定义:(详细网址见下)

size_t strcspn ( const char * str1, const char * str2 );

注:size_t同上.

括号内还是两个字符数组,其中str1还是被从头查找的字符数组,str2还是充当字典。

如果str1中没有任何一个字符在str2中出现过,则strspn(str1, str2)将会直接返回str1的长度(原因:这个函数会检测数组末尾的结束字符,结束字符的下标恰好为所在字符数组的长度)。

7.示例

下面是另一个例子:

#include <cstdio>
#include <cstring>
using namespace std;

char s[] = "ax^2+bx+c=0";
char num[] = "0123456789";
int main()
{
    int a = strcspn(s, num);
    printf("%d", a);
    return 0;
}

这个程序会输出3。

8.参考/灵感来源:

https://cplusplus.com/reference/cstring/strspn/

https://cplusplus.com/reference/cstring/strcspn/

(这个网站超级好用的,就是全英有时候看起来比较费劲)