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.youkuaiyun.com/sophia1224/article/details/53054698
本文介绍了两种在C++中实现类似Java split函数的方法:一种使用vector和for循环来遍历并分割字符串;另一种利用stringstream自动识别并丢弃空格进行字符串分割。通过对比这两种方法的特点,帮助读者根据实际需求选择合适的技术方案。
1万+

被折叠的 条评论
为什么被折叠?



