JAVA中的split函数可谓相当好用,可惜我没在C++中找到类似方法...于是乎我在网上找到了两种自己实现的函数,简单介绍下,之后进行简单比较讨论:
常规方法:
vector<string> split(string str){
int start=0, end=0, size=str.size();
vector<string> result;
for (end=0; end<size; ++end) {
if (str[end]==' ') {
if (end>start) { // Avoid the multi-' ' situation
string newStr=str.substr(start,end-start);
result.push_back(newStr);
}
start=end+1;
}
}
if (end>start) {
string newStr=str.substr(start,end-start);
result.push_back(newStr);
}
return result;
}
利用stringstream的非常规方法:
vector<string> split(string str){
stringstream ss;
ss<<str;
string words;
vector<string> result;
while (ss>>words) {
result.push_back(words);
}
return result;
}
比较:第一种方法将 str[end]=' ' 中的空格替换成其他字符也可行,比价灵活;而第二种方法利用了stringstream自动识别丢弃空格的特性进行分裂,劣势很显然,只能分割以空格作为中间字符的字符串。可以根据具体情况灵活选用。
关于stringstream的方法参考链接:https://blog.csdn.net/sophia1224/article/details/53054698