用STL解析整数

时间:2013-10-15 13:55:00

标签: c++ parsing stl

这是一种解析整数并将它们存储在向量中的漂亮方法,前提是它们是空格分隔的(来自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));
}

是否可以指定另一个分隔符(例如“,”),同时保持类似的东西?

1 个答案:

答案 0 :(得分: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;
}