我解析来自“纯C”接口的文本数组,并且每个字符串可能有任意数量的值,可能孤立地被解析为“istream::operator >>()
”。C++更好的方法来解析值到一个向量
例如,解析器之一是自定义的IPv4类:
std::istream & operator >>(std::istream& stream, IPv4 &var)
的实施是相当明显的。
现在假设等的输入:
const char *string_array[] =
{
"192.168.0.1, 192.168.0.32, 192.168.0.40",
"169.254.3.18, 169.254.3.19, 169.254.3.20, 169.254.3.21",
"10.0.92.100",
"10.0.0.101, 10.0.0.102, 10.0.0.103 , 10.0.0.104 , 10.0.0.110 ",
};
我想找到一种优雅的方式把所有的分析值的数组,这样我可以把它给“C-只有”功能。
天真的方法将首先使用stringstream
将所有字符串(const char *
)控制在一起,然后用我的operator >>
循环播放此流。
std::stringstream ss;
IPv4 ip;
std::vector<IPv4> ip_vector;
for (int c = 0; c < count; ++c)
ss << string_array[ c ] << ", ";
while (ss.good())
{
ss >> ip;
ip_vector.push_back(ip);
}
这对我来说似乎并不明智,但我无法弄清楚如何让这更聪明。
另请注意:Boost不是此解决方案的选项。
您确定您描述的方法正常吗?您将所有字符串写入没有分隔符的流中,因此您最终可能会得到如下所示的片段:'192.168.0.40169.254.3.18'。 – dasblinkenlight 2012-07-13 19:35:28
是的,你是对的。我会修复我的例子,谢谢。 – j4x 2012-07-13 19:38:24