从字符串中提取一个数字

Grab a number from a string

本文关键字:一个 数字 字符串 提取      更新时间:2023-10-16

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

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

我需要提取总是位于>和<之间的数字(在这种情况下为0.32365E+04(;,并将它们放入一个称为weight1的向量中。

到目前为止,我完全不知道该怎么做。我想的是:

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

但我不确定我会在这些括号里放什么。有没有更简单的方法?

我使用@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

非常感谢!