c++分割字符串split方法实现

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。