c++标准库中没有实现split函数,但是split字符串又是特别特别常见的常规操作。网络上能找到很多split的实现方式,下面记录一下本人认为比较优雅,可读性也比较好的两种实现方式。
1.使用find方法
如果是比较老的c++版本,可以使用find方法来实现split功能。
void run() {
string s = "aa bb cc dd";
const string delim = " ";
int nPos = 0;
vector<string> vec;
nPos = s.find(delim.c_str());
while(-1 != nPos) {
string temp = s.substr(0, nPos);
vec.push_back(temp);
s = s.substr(nPos+1);
nPos = s.find(delim.c_str());
}
vec.push_back(s);
for(string ele: vec) {
cout<<ele<<" ";
}
}
上面代码的逻辑:
通过find找到分隔符的位置,然后将分割后的元素挨个存入vector中,得到的就是所需要的结果。
2.regex正则匹配
在c++11中引入了regex模块,通过regex模块我们也可以很方便实现split功能。
void run5() {
string s = "aa bb cc dd";
regex pattern("\\s+");
vector<string> vec(sregex_token_iterator(s.begin(), s.end(), pattern, -1), sregex_token_iterator());
for(auto inner: vec) {
cout<<inner<<endl;
}
}
上面的代码,也可以顺利实现split功能。而且相比find方法,regex的表达方式更为灵活多变。
版权声明:本文为bitcarmanlee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。