在C++标签下最受欢迎的问题之一是名为"在C++中拆分字符串"。在这个问题中,提问者问道:"在C++中拆分字符串的最优雅的方式是什么?"。
回答此问题的得票最高的答案提供了以下两个函数:
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
return split(s, delim, elems);
}
这些函数很好用。但是我想知道为什么回答者没有将这两个函数合并成一个函数。当你将这些函数合并时,是否会有一些性能、可用性或易读性的优点,而你却忽略了呢?下面是结合后的完整程序:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
// splitting them into two seperate functions is unnecessary it seems to me, and makes the underlying function harder to understand.
std::vector<std::string> split(const std::string &s, char delim) {
std::vector<std::string> elems;
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim)) {
elems.push_back(item);
}
return elems;
}
int main()
{
std::vector<std::string> x = split("one:two::three", ':');
for (int i = 0; i<x.size(); ++i) cout << x[i] << '\n';
return 0;
}
我认为将这个函数分开来写显得不够优雅,而且更难理解,但我感觉可能是我漏掉了什么。为什么他不把它们合并起来呢?