C语言字符串高级处理(三)strspn,strcspn,strtok

本文深入解析C语言中的高级字符串操作函数strspn、strcspn及strtok的使用方法,通过实例展示如何查找字符串中特定字符的长度,以及如何使用strtok进行字符串分割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高级字符串查找

strspn():函数返回字符串STR1中第一个不包含于字符串STR2的字符的索引或者理解为STR1包含STR2任一字符的字符长度。

strcspn():函数返回STR1开头连续Ñ个字符都不含字符串STR2内字符的字符数或者理解为STR1不包含STR2任一字符的字符长度。

的的strtok():函数返回字符串STR1中紧接“标记”的部分的指针,字符串STR2是作为标记的分隔符如果分隔标记没有找到,函数返回NULL为了将字符串转换成标记,第一。次调用STR1指向作为标记的分隔符之后所有的调用。STR1都应为NULL或者理解为切割字符串,将海峡切分成一个个子串,STR1:在第一次被调用的时间STR1是传入需要被切割字符串的首地址;在后面调用的时间传入NULL.str1:表示切割字符串(字符串中每个字符都会当作分割符)当分隔符中的所有字符查找到末尾时(即查找完毕),返回NULL; 如果查不到STR2所标示的字符,则返回当前的strtok的的的字符串的指针。

#include <string.h>
size_t strspn( const char *str1, const char *str2 );
size_t strcspn( const char *str1, const char *str2 );
char *strtok( char *str1, const char *str2 );

 先看前两个:

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

int main()
{
	char *str1 = "hello world";
	char *str2 = "hel";
	char *str3 = "rld";

	printf("%s包含%s任一字符的长度是%lu\n",str1,str2,strspn(str1,str2));
	printf("%s不包含%s任一字符的长度是%lu\n",str1,str3,strcspn(str1,str3));
	
	return 0;
}

strtok函数

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

int main()
{
	char str[] = "hello@china@hello@world";
	char *temp = NULL;
	
	temp = strtok(str,"@");
	while(temp)
	{
		printf("%s\n",temp);	
		temp = strtok(NULL,"@");
	}

	return 0;
}

我想使用字符指针直接表示字符串,如下,结果出现段错误了,不知道大家有没有和我一样的疑惑,所以后来研究了下

//char str[] = "hello@china@hello@world";
char *str = "hello@china@hello@world";

是因为这里的str是字符串的指针指向的是字符串常量,即const类型,所以这里不允许修改

修改成下面的就可以了:

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

int main()
{
	char *p = "hello@china@hello@world";
	char str[50];
        char *temp = NULL;
	
	strcpy(str,p);

	temp = strtok(str,"@");
	while(temp)
	{
		printf("str=%s  temp=%s\n",str,temp);	
		temp = strtok(NULL,"@");
	}

	return 0;
}

结果和上面的一样,

另外还有几点要注意的地方可以参考:

https://blog.youkuaiyun.com/chillpolaris/article/details/79830812

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值