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