从字符串中获取一个数字

时间:2015-07-02 17:18:17

标签: c++ string double extract

我试图编写一个C ++程序,它从一个名为myvec的向量中获取输入(每行是一个字符串,如下所示),其中的行如下所示:

<wgt id='1001'> 0.32365E+04 </wgt>

我需要提取始终位于&gt;之间的数字(在这种情况下为0.32365E + 04)。和&lt ;,并将它们放入一个名为weight1的载体中。

到目前为止,我对如何做到这一点感到很遗憾。我正在思考以下几点:

if(myvec[j].find(...) == 0) {
    weight1.push_back(...)
}

但我不确定我会在这些括号中加入什么。这可能是一种更简单的方法吗?

1 个答案:

答案 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

非常感谢你!