版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
结果和上面的一样,
另外还有几点要注意的地方可以参考: