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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33706673/article/details/84892505

高级字符串查找

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.csdn.net/chillpolaris/article/details/79830812

猜你喜欢

转载自blog.csdn.net/qq_33706673/article/details/84892505
今日推荐