方法1. 使用string类的内置函数
该方法的代码如下:
void stringToken(const string sToBeToken, const string sSeperator, vector<string>& vToken)
{
string sCopy = sToBeToken;
int iPosEnd = 0;
while (true)
{
iPosEnd = sCopy.find(sSeperator);
if (iPosEnd == -1 )
{
vToken.push_back(sCopy);
break;
}
vToken.push_back(sCopy.substr(0, iPosEnd));
sCopy = sCopy.substr(iPosEnd + 1);
}
}
函数的形参表中,vToken为输出的子串组。
==当在 find() 函数找不到我们指定的分隔符的时候,返回值为 -1 ==。
方法2. 使用CString的内置函数
该方法比较复杂,需包含cstring头文件。函数代码如下:
void stringToken(string sLine, const char* pSeperator, vector<char*>& vToken)
{
char* cstr = new char[sLine.length()+1];
strcpy(cstr, sLine.c_str());
char*p=strtok(cstr, pSeperator);
vToken.push_back(p);
while(p)
{
p=strtok(NULL, pSeperator);
if(!p)
break;
vToken.push_back(p);
}
}
总结
两种方法一种是使用c_string里的 strcpy(字符数组拷贝) 和 strtok(字符数组分割),一种是使用C++的 string 类的 find() 和 substr() 。
第一种方法返回的是string对象的集合,第二种方法返回的是字符数组的集合。两种方法都能直接使用,请读者自行取舍。