6

这是一种解析整数并将它们存储在向量中的漂亮方法,前提是它们是空格分隔的(来自 Split a string in C++?):

#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>

int main() {
    using namespace std;

    string s = "3 2 1";
    istringstream iss(s);
    vector<int> tokens;

    copy(istream_iterator<int>(iss),
         istream_iterator<int>(),
         back_inserter<vector<int> >(tokens));
}

是否可以在保留类似内容的同时指定另一个分隔符(例如“,”)?

4

1 回答 1

1

您可以使用正则表达式 (C++11) 来概括字符串拆分。此函数通过在正则表达式上拆分字符串来标记您的字符串。

vector<string> split(const string& input, const regex& regex) {
    sregex_token_iterator
        first(input.begin(), input.end(), regex, -1),
        last;
    return vector<string>(first, last);
}

对于您的示例,要拆分“,”传递regex(",")给函数。

#include <iostream>
#include <string>
#include <regex>
#include <vector>

using namespace std;

vector<string> split(const string& input, const regex& regex) {
    sregex_token_iterator
        first(input.begin(), input.end(), regex, -1),
        last;
    return vector<string>(first, last);
}

int main() {

    const regex r = regex(",");
    const string s = "1,2,3";

    vector<string> t = split(s, r);
    for (size_t i = 0; i < t.size(); ++i) {

        cout << "[" << t[i] << "] ";
    }
    cout << endl;

    return 0;
}
于 2013-10-15T14:23:16.487 回答