从写的提取字串的算法太劣了,求改进.
自写的提取字串的算法太劣了,求改进......
希望能在这个思路下改善,但不是的话,也能接受。。。
是参照了昨天一位高手给的纯C以逗号分分隔,拆字符取出使用的思路,运行起来有问题
如不能打印出最后的jkl
最好能全string下操作吧
如果是一些比较纯C的方式,
char*转去string
而且char [xx]的xx大小,都是无法确定的。。。
string可以比较轻松,不用太考虑大小问题。。。
------解决方案--------------------
希望能在这个思路下改善,但不是的话,也能接受。。。
是参照了昨天一位高手给的纯C以逗号分分隔,拆字符取出使用的思路,运行起来有问题
如不能打印出最后的jkl
最好能全string下操作吧
如果是一些比较纯C的方式,
char*转去string
而且char [xx]的xx大小,都是无法确定的。。。
string可以比较轻松,不用太考虑大小问题。。。
- C/C++ code
string MyStr = "ab,cdefghi,jkl"; string tmpStr = ""; int Total = 0; int i = 0; int len = MyStr.length(); cout << len << endl; while(Total <= len) { if((MyStr[Total]) != ",") { tmpStr += MyStr[Total]; } else if (MyStr[Total] == ",") { cout << tmpStr << endl; tmpStr.empty(); } Total++; }
------解决方案--------------------
- C/C++ code
void main() { string a = "abc,def,ggggggghi,jkl,mmm22"; size_t tab = 0; for(size_t i = 0; i < a.size(); ++i) { if(a[i] == ',') { cout<<a.substr(tab, i - tab)<<endl; tab = i + 1; } } //完成结尾处最后一次输出 string str = a.substr(tab, a.size() - tab); if(str != "") cout<<str<<endl; }
------解决方案--------------------
- C/C++ code
string sStr = "abc,def,ggggggghi,jkl,mmm22"; size_t iFindex = 0; size_t iSindex = -1; while ((iSindex = sStr.find(',', iFindex)) != -1) { cout << sStr.substr(iFindex, iSindex - iFindex) << endl; iFindex = iSindex + 1; } cout << sStr.substr(iFindex, sStr.size() - iFindex) << endl;
------解决方案--------------------
- C/C++ code
#include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string str("ab,cdefghi,jkl"); string tmp; int len = str.length(); int i = 0; cout << len << endl; while(i < len) { if(str[i] == ',') { cout << tmp << endl; tmp = ""; } else { tmp += str[i]; } i++; } if(!str.empty()) { cout << tmp << endl; } return 0; }
------解决方案--------------------
仅供参考
- C/C++ code
#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: // <>, <>, <>, <>,