Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从字符串中获取一个数字 我试图编写一个C++程序,它从一个名为MyVEC的向量中输入(每行是一个字符串,如下所示),其中的线条看起来如下: <wgt id='1001'> 0.32365E+04 </wgt>_C++_String_Double_Extract - Fatal编程技术网

从字符串中获取一个数字 我试图编写一个C++程序,它从一个名为MyVEC的向量中输入(每行是一个字符串,如下所示),其中的线条看起来如下: <wgt id='1001'> 0.32365E+04 </wgt>

从字符串中获取一个数字 我试图编写一个C++程序,它从一个名为MyVEC的向量中输入(每行是一个字符串,如下所示),其中的线条看起来如下: <wgt id='1001'> 0.32365E+04 </wgt>,c++,string,double,extract,C++,String,Double,Extract,但我不确定我会在括号里放什么。有没有更简单的方法 我使用@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'>

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

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

非常感谢你

如果字符串的源是XML解析器,则使用XML解析器。您可以按原始顺序查找第一个'>',然后反向查找第一个'
“>\\s*(\\s+)[**在@ ToCopp方法的顶部添加,您可能还希望修剪子字符串以获得额外的空白。您应该考虑使用迭代器来获取向量的每个项。
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