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

Posted bitcarmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++分割字符串split方法实现相关的知识,希望对你有一定的参考价值。

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的表达方式更为灵活多变。

以上是关于c++分割字符串split方法实现的主要内容,如果未能解决你的问题,请参考以下文章

C++实现按指定子串分割母串(split)函数 按空格分割string字符串

C++中String类的字符串分割实现

C#实现字符串按多个字符采用Split方法分割

split函数的实现

Python split()方法分割字符串

C++中的分割函数