【C++】字符串切割

72 阅读1分钟

【C++】字符串切割

#include <iostream>
#include <string>
#include <map>
#include<vector>

using namespace std;

/**
 *
 * @param str src string
 * @param v remain vector  after split str
 * @param delims split  charactor
 */
static void split_v1(const string &str, vector<string> &v, const char delims = '/') {
    v.clear();
    int curr = 0;
    int last = 0;
    int str_size = str.length();

    while (curr < str_size) {
        if (str[curr] == delims) {
            if (curr - last > 0) {
                v.push_back(str.substr(last, curr - last));
            }
            /*记录curr的下一个位置, 跳过delims*/
            last = curr + 1;
        }

        ++curr;
    }
    if (curr - last > 0) {
        v.push_back(str.substr(last, curr - last));
    }
}

static void split_v2(const string &str, vector<string> &v, string delims = " \t\n\r") {
    v.clear();
    int curr = 0;
    int last = 0;
    int str_size = str.length();
    while (curr < str_size) {
        if (delims.find(str[curr]) != string::npos) {
            if (curr - last > 0) {
                v.push_back(str.substr(last, curr - last));
            }
            last = curr + 1;
        }
        ++curr;
    }

    if (curr - last > 0) {
        v.push_back(str.substr(last, curr - last));
    }
}

int main(int argc, char *argv[]) {
    string str = "smooth:0.1, white:0.5, eyeenlarge:0.5, facethin:0.5";

    vector<string> v1;

    split_v1(str, v1, ', ');

    //vector<string>::iterator it = v1.begin();
    auto it = v1.begin();
    for (; it != v1.end(); it++) {
        cout << *it << endl;
    }

    cout << v1[0] + '.' + v1[1] << endl;


    cout << v1[0] + ",,,,,,,,,,," + v1[1] << endl;

    /*-----------------------------------------------------------------*/

    vector<string> v2;
    split_v2(str, v2);

    //vector<string>::iterator it2 = v2.begin();
    auto it2 = v2.begin();
    for (; it2 != v2.end(); it2++) {
        cout << *it2 << endl;
    }

    cout << v2[0] + "         " + v2[1] << endl;

    return 0;
}
smooth:0.1,
white:0.5,
eyeenlarge:0.5,
facethin:0.5
smooth:0.1,.white:0.5,
smooth:0.1,,,,,,,,,,,,white:0.5,
smooth:0.1,
white:0.5,
eyeenlarge:0.5,
facethin:0.5
smooth:0.1,         white:0.5,

Process finished with exit code 0