如何使用以下格式的字符串中的字符串数组填充C ++对的向量:" a:b"," c:d"," E:F" 例如: string a [] = {" 6:7"," 3:5"," 5:2"}; 将其转换为矢量>对内容是从6到7,然后是3和5 ...
我没有使用boost :: lexical_cast和strtol成功,也许使用正则表达式?还有其他想法吗?
THX
答案 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