在写C++程序过程中,有时候会遇到字符串分割的问题,写一个字符串分割的函数,便于以后使用。
使用STL进行字符串分割涉及到string类的两个函数find和substr:
1、find函数
原型:size_t find (const string& str, size_t pos = 0) const;
功能:查找子字符串第一次出现的位置。
参数说明:str为子字符串,pos为初始查找位置。
返回值:返回查询结果的迭代器
2、substr函数
原型:string substr (size_t pos = 0, size_t n = npos) const;
功能:获得子字符串。
参数说明:pos为起始位置(默认为0),n为结束位置(默认为npos)
返回值:一个子字符串,从其指定的位置开始
备注:如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。
实现如下:
bool strsegmentation(string input, char c, vector <string> & segment)
{
//input 输入的字符串
//c 分割符
//segment 输出分割字符片段(集)
if(input == "")
return false;
string tempstr;
int comma;
while (1)
{
comma = input.find(c);
if(comma == -1)
{
tempstr = input.substr(0, input.length());
segment.push_back(tempstr);
break;
}
tempstr = input.substr(0, comma);
input.erase(0, comma + 1);
segment.push_back(tempstr);
}
if(segment.size() == 0)
{
printf("输入字符串为空...\n");
return false;
}
return true;
}
main函数中:
int main(int argc, char* argv[])
{
string teststr = "qwert tdytf gugug35 7665 75567 2wdrt6";
vector <string> segment;
if(!strsegmentation(teststr, ' ' ,segment)) return 0;
for (int i = 0; i < segment.size(); ++i)
cout << segment[i] << endl;
system("pause");
return 0;
}
运行结果:
希望对大家有帮助。