我试图编写一个C ++程序,它从一个名为myvec的向量中获取输入(每行是一个字符串,如下所示),其中的行如下所示:
<wgt id='1001'> 0.32365E+04 </wgt>
我需要提取始终位于&gt;之间的数字(在这种情况下为0.32365E + 04)。和&lt ;,并将它们放入一个名为weight1的载体中。
到目前为止,我对如何做到这一点感到很遗憾。我正在思考以下几点:
if(myvec[j].find(...) == 0) {
weight1.push_back(...)
}
但我不确定我会在这些括号中加入什么。这可能是一种更简单的方法吗?
答案 0 :(得分:0)
我使用@taocp建议如下完美地完成了工作:
void strings()
{
vector <string> myvec;
vector <double> weight1;
myvec.push_back("<wgt id='1001'> 0.12365E+04 </wgt>");
myvec.push_back("<wgt id='1002'> 0.22365E+04 </wgt>");
myvec.push_back("<wgt id='1003'> 0.32365E+04 </wgt>");
myvec.push_back("<wgt id='1004'> 0.42365E+04 </wgt>");
myvec.push_back("<wgt id='1005'> 0.52365E+04 </wgt>");
myvec.push_back("<wgt id='1006'> 0.62365E+04 </wgt>");
myvec.push_back("<wgt id='1007'> 0.72365E+04 </wgt>");
myvec.push_back("<wgt id='1008'> 0.82365E+04 </wgt>");
myvec.push_back("<wgt id='1009'> 0.92365E+04 </wgt>");
for(int i = 0; i < 9; i++) {
weight1.push_back(stod(myvec[i].substr(myvec[i].find('>')+2, myvec[i].rfind('<')-myvec[i].find('>')-3)));
cout << weight1[i] << endl;
}
}
输出:
1236.5
2236.5
3236.5
4236.5
5236.5
6236.5
7236.5
8236.5
9236.5
非常感谢你!