字符串分割方法代码
2013-04-06 20:11
281 查看
一、需求:把字符串按照给定拆分符(字符或字符串)拆分开:
例如:
a.字符拆分:
a1: 1001,ziweiyi,abcd (末尾无拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
a2: 1001,ziweiyi,abcd, (末尾有拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
b.字符串拆分:
b1: 1001brziweiyibrabcd (末尾无拆分符) 按照“br”拆分开成:1001 ziweiyi abcd
b2: 1001brziweiyibrabcdbr (末尾有拆分符) 按照“ br”拆分开成:1001 ziweiyi abcd
二、上代码:这里提供两个可用拆分函数,请根据字喜好选择使用
方法一:
方法二:
三、测试main
这里指给出了最常见的案例(需求a1的情况),其他的可以自己测试,本人已测试过。
贴出测试效果,更明白:
a1: 1001,ziweiyi,abcd (末尾无拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
a2: 1001,ziweiyi,abcd, (末尾有拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
b.字符串拆分:
b1: 1001brziweiyibrabcd (末尾无拆分符) 按照“br”拆分开成:1001 ziweiyi abcd
b2: 1001brziweiyibrabcdbr (末尾有拆分符) 按照“ br”拆分开成:1001 ziweiyi abcd
欢迎大家分享其他的方法,共同学习!
例如:
a.字符拆分:
a1: 1001,ziweiyi,abcd (末尾无拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
a2: 1001,ziweiyi,abcd, (末尾有拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
b.字符串拆分:
b1: 1001brziweiyibrabcd (末尾无拆分符) 按照“br”拆分开成:1001 ziweiyi abcd
b2: 1001brziweiyibrabcdbr (末尾有拆分符) 按照“ br”拆分开成:1001 ziweiyi abcd
二、上代码:这里提供两个可用拆分函数,请根据字喜好选择使用
方法一:
void SplitString(char* src,const char* separator, vector<string>& destVector) { destVector.clear(); if(0==strlen(separator)) { destVector.push_back(string(src)); return ; } char *first,*second; char tmp[50]; first = src; while(first) { memset(tmp,'\0',sizeof(tmp)); second = strstr(first,separator); if (NULL==second) { strncpy(tmp,first,strlen(src)); } else { strncpy(tmp,first,second-first); } if (strlen(tmp)!=0) { destVector.push_back(string(tmp)); } first = second +strlen(separator); if (NULL==second) break; } }
方法二:
int SplitString(const string src, string separator, vector<string>& destVector) { string temp, SrcTemp; int nPos = 0, nResultCount = 0; bool bAddEmpty = false; destVector.clear(); SrcTemp = src; if(separator.empty()) { destVector.push_back(SrcTemp); return 1; } do { nPos = SrcTemp.find(separator); if(nPos != string::npos) { if(nPos == 0) { SrcTemp = SrcTemp.substr(nPos + separator.length(), SrcTemp.length() - nPos - separator.length()); continue; } else if(nPos > 0) { temp = SrcTemp.substr(0, nPos); SrcTemp = SrcTemp.substr(nPos + separator.length(), SrcTemp.length() - nPos - separator.length()); if (temp.length() > 0) { destVector.push_back(temp); nResultCount++; } else if (bAddEmpty) { destVector.push_back(temp); nResultCount++; } } } else { if(nResultCount == 0) { if (SrcTemp.length() > 0) { destVector.push_back(SrcTemp); nResultCount++; } else if (bAddEmpty) { destVector.push_back(SrcTemp); nResultCount++; } SrcTemp = ""; } else if(nResultCount > 0) { if (SrcTemp.length() > 0) { destVector.push_back(SrcTemp); nResultCount++; } else if (bAddEmpty) { destVector.push_back(SrcTemp); nResultCount++; } SrcTemp = ""; } else return -1; } } while(!SrcTemp.empty()); return nResultCount; }
三、测试main
void main() { vector<string> vecTar; char szSrc[]="1001,ziweiyi,abcd"; SplitString(szSrc, ",", vecTar);//方法一 for (int i = 0; i < vecTar.size();i ++) { printf("【%s】 SplitString: %s\n",szSrc,vecTar[i].c_str()); } printf("方法1,end.\n\n"); string strSrc="1001,ziweiyi,abcd"; int nRet = SplitString(strSrc, ",", vecTar);//方法二 for (int i = 0; i < nRet;i ++) { printf("【%s】 SplitString: %s\n",strSrc.c_str(),vecTar[i].c_str()); } printf("方法2,end.\n\n"); }
这里指给出了最常见的案例(需求a1的情况),其他的可以自己测试,本人已测试过。
贴出测试效果,更明白:
a1: 1001,ziweiyi,abcd (末尾无拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
a2: 1001,ziweiyi,abcd, (末尾有拆分符) 按照' ,'拆分开成:1001 ziweiyi abcd
b.字符串拆分:
b1: 1001brziweiyibrabcd (末尾无拆分符) 按照“br”拆分开成:1001 ziweiyi abcd
b2: 1001brziweiyibrabcdbr (末尾有拆分符) 按照“ br”拆分开成:1001 ziweiyi abcd
欢迎大家分享其他的方法,共同学习!
相关文章推荐
- 字符串分割方法代码
- 字符串分割方法代码
- 精简代码:Python的split方法函数可以分割字符串成列表,默认是以空格作为分隔符sep来分割字符串。
- 【代码笔记】iOS-字符串的分割
- 个人觉得最好的生成","分割字符串的方法
- JScript分割字符串示例代码
- C#中使用split分割字符串的几种方法小结
- c#中Split分割字符串的几种方法
- python 按照固定长度分割字符串的方法小结
- sql字符串分割扩展方法
- c#中分割字符串的几种方法
- c#中Split分割字符串的几种方法
- MySQL中实现分割字符串的方法
- c#中Split等分割字符串的几种方法(转)
- c#使用Split方法分割字符串
- Java字符串分割方法
- C#实现字符串按多个字符采用Split方法分割
- asp.net(c#)中分割字符串的几种方法
- c#中分割字符串的几种方法