string
@header
@version1.1
@target_dataDB-110817M-030
@major_dataDB-110817M-030
@create_date20110825
怎么把 DB-110817M-030 到target_data 中间有好多空格的。 而且是循环的
[解决办法]
#include <stdio.h>#include <string.h>char s[]="@header\n""@version 1.1\n""@target_data DB-110817M-030\n""@major_data DB-110817M-030\n""@create_date 20110825\n";char seps1[4];char seps2[4];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;}int main() { strcpy(seps1,"");strcpy(seps2,"@ \n"); printf("\n[%s]\nTokens:\n",s); token=zzstrtok(s,seps1,seps2); while (token!=NULL) { printf("<%s>\n",token); token=zzstrtok(NULL,seps1,seps2); }}////[@header//@version 1.1//@target_data DB-110817M-030//@major_data DB-110817M-030//@create_date 20110825//]//Tokens://<header>//<version>//<1.1>//<target_data>//<DB-110817M-030>//<major_data>//<DB-110817M-030>//<create_date>//<20110825>