首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

如何把string拆分

2014-01-15 
怎么把string拆分一个string类型的字符串“0|0|201312|0|0|20000|8000|0|201312|0|0|21425|8000|7|201312

怎么把string拆分
一个string类型的字符串“0|0|201312|0|0|20000|800;0|0|201312|0|0|21425|800;0|7|201312|0|0|21425|24|1050000:21425|800……”我只想要冒号后面的,冒号后面的都是“21425|800”这种类型,而且我不能确定冒号后面会存在几个,如果存在几个就分成几个string,这个怎么写啊
[解决办法]

引用:
Quote: 引用:

string不是有个find吗,你利用这个去找就好了

我还要用后面的21425去别的地方东西,需要保存下,

哎,真是表示蛋疼。
你用find找到位置,,然后newstring.assign(find_iterator, string_.end());

当然还有其他的很多办法,上面我只写了个伪代码。

多看看源码
[解决办法]
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.

[解决办法]
#include <stdio.h>
#include <string.h>
char string[80];
char seps1[3];
char seps2[3];
char *token;
char *zzstrtok (
    char *string,
    const char *control1,//连续出现时视为中间夹空token
    const char *control2 //连续出现时视为中间无空token
    )
{
    unsigned char *str;
    const unsigned char *ctrl1 = control1;
    const unsigned char *ctrl2 = control2;
    unsigned char map1[32],map2[32];
    static char *nextoken;
    static char flag=0;
    unsigned char c;
    int L;

    memset(map1,0,32);
    memset(map2,0,32);
    do {
        map1[*ctrl1 >> 3] 
[解决办法]
= (1 << (*ctrl1 & 7));
    } while (*ctrl1++);
    do {
        map2[*ctrl2 >> 3] 
[解决办法]
= (1 << (*ctrl2 & 7));
    } while (*ctrl2++);

    if (string) {
        if (control2[0]) {
            L=strlen(string);
            while (1) {
                c=string[L-1];
                if (map2[c >> 3] & (1 << (c & 7))) {
                    L--;
                    string[L]=0;
                } else break;
            }
        }
        if (control1[0]) {
            L=strlen(string);


            c=string[L-1];
            if (map1[c >> 3] & (1 << (c & 7))) {
                string[L]=control1[0];
                string[L+1]=0;
            }
        }
        str=string;
    }
    else        str=nextoken;

    string=str;
    while (1) {
        if (0==flag) {
            if (!*str) break;
            if (map1[*str >> 3] & (1 << (*str & 7))) {
                *str=0;
                str++;
                break;
            } else if (map2[*str >> 3] & (1 << (*str & 7))) {
                string++;
                str++;
            } else {
                flag=1;
                str++;
            }
        } else if (1==flag) {
            if (!*str) break;
            if (map1[*str >> 3] & (1 << (*str & 7))) {
                *str=0;
                str++;
                flag=0;
                break;
            } else if (map2[*str >> 3] & (1 << (*str & 7))) {
                *str=0;
                str++;
                flag=2;
                break;
            } else str++;
        } else {//2==flag
            if (!*str) return NULL;
            if (map1[*str >> 3] & (1 << (*str & 7))) {
                str++;
                string=str;
                flag=0;
            } else if (map2[*str >> 3] & (1 << (*str & 7))) {
                str++;
                string=str;
            } else {
                string=str;
                str++;
                flag=1;
            }
        }
    }
    nextoken=str;

    if (string==str) return NULL;
    else             return string;
}
void main()
{
   strcpy(string,"A \tstring\t\tof ,,tokens\n\nand some  more tokens, ");


   strcpy(seps1,",\n");strcpy(seps2," \t");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"1234
[解决办法]
 LIYI
[解决办法]
China 
[解决办法]
 010 
[解决办法]
201110260000
[解决办法]
OK");
   strcpy(seps1,"
[解决办法]
");strcpy(seps2," ");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"1234
[解决办法]
LIYI
[解决办法]
010
[解决办法]
201110260000
[解决办法]
OK");
   strcpy(seps1,"");strcpy(seps2,"
[解决办法]
");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"1234
[解决办法]
LIYI
[解决办法]
010
[解决办法]
201110260000
[解决办法]
OK");
   strcpy(seps1,"
[解决办法]
");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"a");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"a,b");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"a,,b");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,",a");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,"a,");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,",a,,b");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,",,a,,b,,");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);


      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,",");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,",,");
   strcpy(seps1,",");strcpy(seps2,"");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }

   strcpy(string,",,,");
   strcpy(seps1,",");strcpy(seps2," ");
   printf("\n[%s]\nTokens:\n",string);
   token=zzstrtok(string,seps1,seps2);
   while (token!=NULL) {
      printf(" <%s>",token);
      token=zzstrtok(NULL,seps1,seps2);
   }
}
//
//[A      string          of ,,tokens
//
//and some  more tokens,]
//Tokens:
// <A>, <string>, <of>, <>, <tokens>, <>, <and>, <some>, <more>, <tokens>, <>,
//[1234
[解决办法]
 LIYI
[解决办法]
China 
[解决办法]
 010 
[解决办法]
201110260000
[解决办法]
OK]
//Tokens:
// <1234>, <LIYI>, <China>, <010>, <201110260000>, <OK>,
//[1234
[解决办法]
LIYI
[解决办法]
010
[解决办法]
201110260000
[解决办法]
OK]
//Tokens:
// <1234>, <LIYI>, <010>, <201110260000>, <OK>,
//[1234
[解决办法]
LIYI
[解决办法]
010
[解决办法]
201110260000
[解决办法]
OK]
//Tokens:
// <1234>, <LIYI>, <>, <010>, <201110260000>, <OK>,
//[a]
//Tokens:
// <a>,
//[a,b]
//Tokens:
// <a>, <b>,
//[a,,b]
//Tokens:
// <a>, <>, <b>,
//[,a]
//Tokens:
// <>, <a>,
//[a,]
//Tokens:
// <a>, <>,
//[,a,,b]
//Tokens:
// <>, <a>, <>, <b>,
//[,,a,,b,,]
//Tokens:
// <>, <>, <a>, <>, <b>, <>, <>,
//[,]
//Tokens:
// <>, <>,
//[,,]
//Tokens:
// <>, <>, <>,
//[,,,]
//Tokens:
// <>, <>, <>, <>,


[解决办法]
#include <stdio.h>
#include <string.h>
#define MAXN  100   //:后最多有
[解决办法]
间隔的MAXN项
#define MAXL   10   //每项最长10个ASCII字符
#define MAXLQ "10"  //每项最长"10"个ASCII字符
char s1[]="0
[解决办法]
0
[解决办法]
201312
[解决办法]
0
[解决办法]
0
[解决办法]
20000
[解决办法]
800;0
[解决办法]
0
[解决办法]
201312
[解决办法]
0
[解决办法]
0
[解决办法]
21425
[解决办法]
800;0
[解决办法]
7
[解决办法]
201312
[解决办法]
0
[解决办法]
0
[解决办法]
21425
[解决办法]
24
[解决办法]
1050000:21425
[解决办法]
800";
char s2[]="0
------解决方案--------------------


0
[解决办法]
201312
[解决办法]
0
[解决办法]
0
[解决办法]
20000
[解决办法]
800;0
[解决办法]
0
[解决办法]
201312
[解决办法]
0
[解决办法]
0
[解决办法]
21425
[解决办法]
800;0
[解决办法]
7
[解决办法]
201312
[解决办法]
0
[解决办法]
0
[解决办法]
21425
[解决办法]
24
[解决办法]
1050000:21425
[解决办法]
800
[解决办法]
1
[解决办法]
9999999";
char t[MAXN][MAXL+1];
char *p,c;
int i,n,r;
int main() {
    p=strchr(s1,':');
    if (NULL==p) {
        printf("[%s] not include :\n",s1);
        return 1;
    }
    p++;
    i=0;
    while (1) {
        r=sscanf(p,"%"MAXLQ"[^
[解决办法]
]%c%n",t[i],&c,&n);
        if (2==r
[解决办法]
1==r) {
            i++;
            if (i>=MAXN) {
                printf("Too many items!(>%d)\n",MAXN);
                break;
            }
            if (1==r) break;
            p+=n;
        } else {//EOF==r
[解决办法]
0==r
            break;
        }
    }
    n=i;
    for (i=0;i<n;i++) printf("t[%d]==[%s]\n",i,t[i]);

    p=strchr(s2,':');
    if (NULL==p) {
        printf("[%s] not include :\n",s2);
        return 1;
    }
    p++;
    i=0;
    while (1) {
        r=sscanf(p,"%"MAXLQ"[^
[解决办法]
]%c%n",t[i],&c,&n);
        if (2==r
[解决办法]
1==r) {
            i++;
            if (i>=MAXN) {
                printf("Too many items!(>%d)\n",MAXN);
                break;
            }
            if (1==r) break;
            p+=n;
        } else {//EOF==r
[解决办法]
0==r
            break;
        }
    }
    n=i;
    for (i=0;i<n;i++) printf("t[%d]==[%s]\n",i,t[i]);
    return 0;
}
//t[0]==[21425]
//t[1]==[800]
//t[0]==[21425]
//t[1]==[800]
//t[2]==[1]
//t[3]==[9999999]
//

热点排行