您的位置:首页 > 编程语言

字符串分割方法代码

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

二、上代码:这里提供两个可用拆分函数,请根据字喜好选择使用

方法一:

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



欢迎大家分享其他的方法,共同学习!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: