新的一年到来,第一周总是没什么状态,就随便写写简单的一些算法,今天就来实现一个字符串分割。
需求为:根据指定分割符,分割字符串,并将分割好的各个子串存入vector向量中。
举例:假如存在字符串char str[] = "123,456,789,abc,def",那么按逗号','作为分割符,最终vector向量中的内容便为:vector<string> result = {"123", "456", "789", "abc", "def"}
代码实现起来比较简单,就不做什么分析了,下边直接贴代码:
#include <stdio.h>
#include <vector>
#include <string>
#include <iostream>
#include <string.h>
#include <assert.h>
using namespace std;
//字符串分割函数
/*
* src:待分割的字符串
* splite:分割符
* result: 存放分割结果
*/
void SpliteStr(const char* src, char splite, vector<string>& result)
{
assert(src);
string str;
char szBuf[256] = {0};
char szTmp[128] = {0};
char *pc = NULL;
bool isFound = false;
strncpy(szBuf, src, strlen(src));
while(1)
{
pc = NULL;
pc = strchr(szBuf, splite);
if(!pc)
{
break;
}
isFound = true;
memset(szTmp, 0, sizeof(szTmp));
strncpy(szTmp, szBuf, pc-szBuf);
strcpy(szBuf, pc+1);
szTmp[strlen(szTmp)] = '\0';
szBuf[strlen(szBuf)] = '\0';
str = szTmp;
result.push_back(str);
}
if(isFound && (strlen(szBuf)>0))
{
str = szBuf;
result.push_back(str);
}
}
//main函数,用于验证字符串分割功能
int main(int argc, char* argv[])
{
char testStr[] = "123,456,789,abc,def";
vector<string> result;
SpliteStr(testStr, ',', result);
vector<string>::iterator iter;
for(iter=result.begin(); iter!=result.end(); iter++)
{
cout << *iter << endl;
}
return 0;
}
使用g++编译一下,执行便能得到我们想要的效果: