美文网首页
自己写的一个C++字符串分割的工具函数

自己写的一个C++字符串分割的工具函数

作者: XDgbh | 来源:发表于2018-08-13 10:09 被阅读18次

    //设计的string分割函数,使用一个vector存放每一个string,分割符也用一个string,对里面每个字符都可以进行分割。
    //也可以用于分割字符串常量,delim参数也可以是字符串常量。
    //必须包含头文件 #include<string>和#include<vector>
    原理:用到string的两个成员函数find_first_ofsubstr,即先找到一个分割字符串的开头pos1和到下一个分割字符串的距离count=pos2-pos1,然后用substr获取从pos1开始的count个字符的子串就是一个分割出来的字符串。然后都存放到参数传入的vector中。

    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    
    //设计的string分割函数,使用一个vector存放每一个string,分割符也用一个string,对里面每个字符都可以进行分割。
    //也可以用于分割字符串常量,delim参数也可以是字符串常量。
    //必须包含头文件  #include<string>和#include<vector>
    void string_split(const string &str, vector<string> &v_str, const string &delim)
    {
        int pos1 = 0, pos2 = 0;
        int len = str.length();
        while (pos1 < len && pos2 != string::npos)
        {
            int count = 0;
            pos2 = str.find_first_of(delim, pos1);
            if (pos2 != string::npos)
            {
                if (pos1 < pos2)
                {
                    count = pos2 - pos1;
                }
            }
            else if (pos1<len)
            {
                //pos2到了最后字符串末尾
                count = len - pos1;
            }
    
            if (count > 0)
            {
                string temp = str.substr(pos1, count);
                v_str.push_back(temp);
            }
            pos1 = pos2 + 1;
        }
    }
    
    int main()
    {
        //实现一个C++的字符串分割函数
        string str = "aa bb cc ,dd, ee ";
        string delim = " ,";
        vector<string> v_str;
        string_split(str, v_str, delim);
        cout << "分割string字符串:" << endl;
        for (string s : v_str)
        {
            cout << s << endl;
        }
        vector<string> v_str2;
        string_split(".1.2aa 3bb 4cc ,5dd, 6ee ", v_str2, " ,.");
        cout << "直接分割常量字符串:" << endl;
        for (string s : v_str2)
        {
            cout << s << endl;
        }
        char * cstr = ",,c1 c2.c3,,c4,";
        vector<string> v_str3;
        string_split(cstr, v_str3, " ,.");
        cout << "直接分割C风格字符串数组:" << endl;
        for (string s : v_str3)
        {
            cout << s << endl;
        }
    
        return 0;
    }
    
    image.png

    相关文章

      网友评论

          本文标题:自己写的一个C++字符串分割的工具函数

          本文链接:https://www.haomeiwen.com/subject/jmjybftx.html