从字符串分割说起

来源:互联网 发布:网络教育学位有用吗 编辑:程序博客网 时间:2024/06/06 08:33
先简单那看一个例子:
9 #include <</span>stdio.h>
10 #include <</span>string.h>
11 
12 int main(){
13   char str[] = "Hello,World";
14   const char *del = ",";
15   char *= strtok(str,del);
16 
17   while(s != NULL){
18    printf("%s\n",s);
19    = strtok(NULL,del);
20  }
21 
22   return 0;
23 }
结果:
Hello
World

再来看看strtok的实现过程:

 
 #include
 
 
 
 char * __cdecl strtok(char *s1, const char*delimit)
 {
     static char*lastToken = NULL; //注意这里是static哦!
     char*tmp;
 
     
     if ( s1 ==NULL ) {
        s1 = lastToken;
        if (s1 == NULL)      
           return NULL;
     } else{
        s1 +=strspn(s1, delimit);
     }
 
     
     tmp = strpbrk(s1,delimit);
     if (tmp){
        
        *tmp = '\0';
        lastToken = tmp + 1;
     } else{
        
        lastToken = NULL;
     }
 
     returns1;
 }


好,如果对上面strtok中的函数strpbrk不是很了解,好,我再贴他们的实例:

#include<string.h>
#include<stdio.h>
intmain()
{
   char *str1="please tryagain,sky2098!";
   char *str2="Hello,I am sky2098,I likewriting!";
   char *strtemp;
   strtemp=strpbrk(str1,str2); //搜索进行匹配
   printf("Result is:  %s",strtemp);
   return 0;
}
结果:lease tryagain,sky2098!
strpbrk函数功能:比较字符串str1和str2中是否有相同的字符,如果有,则返回该字符在str1中的位置的指针

这下清楚了吧
还有个函数

strspn(比较一下和strcspn的区别哦)

#include <string.h>
#include <stdio.h>
void main()
{
char *str="Linux was first developed for 386/486-basedpcs.";
printf("%d\n",strcspn(str," "));
printf("%d\n",strcspn(str,"/-"));
printf("%d\n",strcspn(str,"1234567890"));


printf("%d\n",strspn(str,"Li xun"));
printf("%d\n",strspn(str,"/-"));
printf("%d\n",strspn(str,"1234567890"));
}
结果:
5
33
30
6
0
0

strcspn(const char *s1,const char *s2);
顺序在字符串s1中搜寻与s2中字符的第一个相同字符,返回这个字符在s1中第一次出现的位置

strspn (const char *s,const char * accept);
返回 返回字符串s开头连续包含字符串accept内的字符数目。好好理解一下吧^_^


0 0