C: Parse empty tokens from a string with strtok

后端 未结 8 1130
臣服心动
臣服心动 2020-12-10 19:08

My application produces strings like the one below. I need to parse values between the separator into individual values.

2342|2sd45|dswer|2342||5523|||3654|         


        
8条回答
  •  盖世英雄少女心
    2020-12-10 19:40

    char *mystrtok(char **m,char *s,char c)
    {
      char *p=s?s:*m;
      if( !*p )
        return 0;
      *m=strchr(p,c);
      if( *m )
        *(*m)++=0;
      else
        *m=p+strlen(p);
      return p;
    }
    
    • reentrant
    • threadsafe
    • strictly ANSI conform
    • needs an unused help-pointer from calling context

    e.g.

    char *p,*t,s[]="2342|2sd45|dswer|2342||5523|||3654|Pswt";
    for(t=mystrtok(&p,s,'|');t;t=mystrtok(&p,0,'|'))
      puts(t);
    

    e.g.

    char *p,*t,s[]="2,3,4,2|2s,d4,5|dswer|23,42||5523|||3654|Pswt";
    for(t=mystrtok(&p,s,'|');t;t=mystrtok(&p,0,'|'))
    {
      char *p1,*t1;
      for(t1=mystrtok(&p1,t,',');t1;t1=mystrtok(&p1,0,','))
        puts(t1);
    }
    

    your work :) implement char *c as parameter 3

提交回复
热议问题