如何从具有格式" a:b"?的字符串数组中填写C ++对的向量。

时间:2016-07-19 15:27:27

标签: c++ arrays vector

如何使用以下格式的字符串中的字符串数组填充C ++对的向量:" a:b"," c:d"," E:F" 例如: string a [] = {" 6:7"," 3:5"," 5:2"}; 将其转换为矢量>对内容是从6到7,然后是3和5 ...

我没有使用boost :: lexical_cast和strtol成功,也许使用正则表达式?还有其他想法吗?

THX

2 个答案:

答案 0 :(得分:8)

最简单的方法可能是使用字符串流来处理转换:

std::pair<int, int> cvt(std::string const &in) { 
    std::stringstream buff(in);
    std::pair<int, int> ret;
    buff >> ret.first >> std::ignore(1) >> ret.second;
    return ret;
}

如果您的输入可能不是数字,您可以很容易地将它们保存为字符串,例如:

std::pair<std::string, std::string> cvt(std::string const &in) { 
    std::stringstream buff(in);
    std::pair<std::string, std::string> ret;
    std::getline(buff, ret.first, ':');
    std::getline(buff, ret.second);
    return ret;
}

然后您可以使用std::transform将其应用于整个输入数组:

std::vector<std::pair<int, int> > pairs; // or std::pair<std::string, std::string>

std::transform(std::begin(a), std::end(a), std::back_inserter(pairs), cvt);

答案 1 :(得分:4)

怎么样?
using int_pair = std::pair<int, int>;
std::string input_array[] = { "12:000", "55:22" };
std::vector<int_pair> pair_vector;
std::transform(std::cbegin(input_array), std::cend(input_array),
    std::back_inserter(pair_vector), [](std::string const& str)
        -> int_pair {
        auto const& it = std::find(str.cbegin(), str.cend(), ':');
        return std::make_pair(std::stoi(std::string(str.begin(), it)), std::stoi(std::string(it+1, str.cend())));
});

// Let's display the results
for (auto const& pair : pair_vector) {
    std::cout << "First = " << pair.first << ", Second = " << pair.second << '\n';
}

这将输出:

  

第一个= 12,第二个= 0
  第一个= 55,第二个= 22

如所示live