我想对下面的字符串进行处理
格式:数字:字符串1:数字,数字:字符串2:数字,.....,数字:字符串N:数字
例如:70:汉字\,:1,0:李果:1,.....,340:字符串:1处理时按","进行分隔
buf1 = 70:汉字\,:1
buf2 = 0:李果:1
.............
bufN = 340:字符串:1请教以下路过高人

解决方案 »

  1.   

    用 strtok 函数来做方便.
      

  2.   

    CString s="70:汉字\,:1,0:李果:1,.....,340:字符串:1",s1,s2,s3;
    int Len;
    int TotalLen;
    TotalLen=s.Length();
    Len=s.Find(",",0);
    s1=s.Left(Len);
    s=s.Right(TotalLen-Len);TotalLen=s.Length();
    Len=s.Find(",",0);
    s2=s.Left(Len);
    s=s.Right(TotalLen-Len);TotalLen=s.Length();
    Len=s.Find(",",0);
    s3=s.Left(Len);
    //s=s.Right(TotalLen-Len);这样就可以到不同的字符串了
      

  3.   

    /* STRTOK.C: In this program, a loop uses strtok
     * to print all the tokens (separated by commas
     * or blanks) in the string named "string".
     */#include <string.h>
    #include <stdio.h>char string[] = "A string\tof ,,tokens\nand some  more tokens";
    char seps[]   = " ,\t\n";
    char *token;void main( void )
    {
       printf( "%s\n\nTokens:\n", string );
       /* Establish string and get the first token: */
       token = strtok( string, seps );
       while( token != NULL )
       {
          /* While there are tokens in "string" */
          printf( " %s\n", token );
          /* Get next token: */
          token = strtok( NULL, seps );
       }
    }
      

  4.   

    void print(char *str);
    int main(int argc, char* argv[])
    {
    char *str = "70:0:汉字\,:1:1,340:0:李果:1:1";
    char *p, *q = p + strlen(str);
    char *buf; while (*p) 
    {
    buf = new char[100];
    buf = parse(p,q,','); 
    printf("%s\n", buf);
    delete []buf;
    }
    return 0;
    }char *parse(char *p, char *q, char splitchar) 
    {
    char *ret=p;
    while (p<q) 
    {
    if(*p=='\\') p+=2;
    else 
    if(*p==splitchar) 
    {
    *p='\0';
    p++; 
    return ret;
    }
    else p++;
    }
    return ret;
    }这个是我写的,但是不知道为什么不得到结果....
      

  5.   

    不能使用CString类....不好意思还有我希望的结果是
    char *str = "70:0:汉字\,:1:1,340:0:李果:1:1,......,340:0:字符串:1:1";
    里面有任意组由 ","分开的分成buf[0] = 70:0:汉字\,:1:1;
        buf[1] = 340:0:李果:1:1;
        ...........
      

  6.   

    直接getchar不行吗 get的char为","就分割呀 很容易实现的
      

  7.   

    直接getchar不行吗 get的char为","就分割呀 很容易实现的=================================这样的话我就分不了buf[0] = 70:0:汉字\,:1:1;这个了
      

  8.   

    char *parse(char **p, char *q, char splitchar);
    int main(int argc, char* argv[])
    {
    char *str = "70:0:汉字\,:1:1,340:0:李果:1:1";
    char *p = str, *q = p + strlen(str);
    char *buf; while (*p) 
    {
    buf = parse(&p, q,','); 
    printf("%s\n", buf);
    }
    return 0;
    }char *parse(char **p, char *q, char splitchar) 
    {
    char *ret=*p;
    while (*p<q) 
    {
    if(**p=='\\') *p+=2;
    else 
    if(**p==splitchar) 
    {
    **p='\0';
    *p++; 
    return ret;
    }
    else *p++;
    }
    return ret;
    }这是我的代码,但是结果还是不对,希望那个高人来指点以下
      

  9.   

    char src[] = "70:汉字:1,0:李果:1,340:字符串:1" ; char* element;
    char data[256][256] = {0};
    int i = 0 ;
    element = strtok(src, ",");

    while(element != NULL)
    {
        strcpy(data[i++], element) ;
        element = strtok(NULL, ",");
    }
      

  10.   

    char src[] = "70:汉字:1,0:李果:1,340:字符串:1" ; char* element;
    char data[256][256] = {0};
    int i = 0 ;
    element = strtok(src, ",");

    while(element != NULL)
    {
        strcpy(data[i++], element) ;
        element = strtok(NULL, ",");
    }
    如果是char src[] = "70:汉字\\,:1,0:李果:1,340:字符串:1" ;
    这个结果就不是我想要的
    70:汉字\\,:1为一组   0:李果:1和340:字符串:1为另外2组了
      

  11.   

    如果是char src[] = "70:汉字\,:1,0:李果:1,340:字符串:1" ;'\,'在src中就是',' '\'是不存在的escape char
    所以src[] = "70:汉字,:1,0:李果:1,340:字符串:1" ;
      

  12.   

    如果是char src[] = "70:汉字\\,:1,0:李果:1,340:字符串:1" ;
    这个结果就不是我想要的
    70:汉字\\,:1为一组   0:李果:1和340:字符串:1为另外2组了
    ========================
    这里做以下更正还有我刚写完了....谢谢大家
      

  13.   

    楼主似乎没有搞清\的意思"0:汉字\\,:1,0:李果:1,340:字符串:1"这样写的字符串,其存在内存里是
    [0:汉字\,:1,0:李果:1,340:字符串:1],"\\"不是给计算机看的,是给人看的。“如果是char src[] = "70:汉字\\,:1,0:李果:1,340:字符串:1" ;
    这个结果就不是我想要的
    70:汉字\\,:1为一组   0:李果:1和340:字符串:1为另外2组了”我猜测LZ的意思是要得到内存里面为[70:汉字\,:1]的数据,而实际上,你上面说的这个所得到的"70:汉字\\,:1"的字符串,内存里面就已经是[70:汉字\,:1]了。简单的讲,'\\'是一个字符[\]而不是两个字符[\\],你可以用printf("\\")来验证。
      

  14.   

    char str[] = "70:0:汉字,:1:1,340:0:李果\,:1:1,......,340:0:字符串:1:1";
     char sep[] =",";
     char * token;
     token = strtok(str,sep);
     while (token != NULL)
     {cout<<token<<endl;
     token = strtok(NULL,sep);
     
     }
      

  15.   

    char str[] = "70:0:汉字,:1:1,340:0:李果\,:1:1,......,340:0:字符串:1:1";
    int i = 0;
    int t = 0;
    char  buf[256];
    char *fin = new char[256];
    int u = 0;
    while (str[i] !='\0')
    {

      if(str[i] != ',')
     {
         buf[t++] = str[i++];
      }
      else 
      {
       buf[t] ='\0';
      strcpy(fin,buf);
      u++;
      t = 0;
      i++;
      cout<<fin<<endl;
      }
    }
    不知道2种你需要的是什么样的