如何从输入字符串中提取数值? C ++

时间:2013-05-27 20:56:35

标签: c++ string

我需要从字符串中获取所有数字(double)并将它们写入数组。

示例

字符串:blabla2bla 123,12 bla bla 99 bla bla 3,1415bla bla

数组: [2] [123,12] [99] [3,1415]

我正在尝试使用 strtod ,但不太明白它是如何工作的。

double d;
int leng;
string v;
char *end=(char*)s.c_str();
size_t i=0,k=0;
char buf[20];
while(1)
{
    d=strtod(s.c_str(),&end);
    cout<<d<<endl;
    if(d==NULL) break;
    sprintf(buf,"%f",d);
    v=(const char*)buf;
    leng=v.length();
    k=s.find(v,i)+1;
    s.erase(k,leng);
}

3 个答案:

答案 0 :(得分:0)

如果您事先知道输入格式,可以使用sscanf

答案 1 :(得分:0)

如果输入未知(与ksfone的回答假设相反),我认为最简单的方法是使用isdigit的组合一次处理每个字符,并在数字序列后检查逗号。然后可以在找到数字时将数字放入数组中。

答案 2 :(得分:0)

这是一种方法(未经测试,但应该有效)

想法是阅读内容,当它们不是正确的数据类型时,只需使用它们并继续阅读:

vector<double> l;

// loop will end wh1en stream is exhausted
while (cin) {
    double x;
    // while we read a double, add it to our list
    while (cin >> x) {
        l.push_back(x);
    }

    // entered a fail state
    cin.clear();
    // need to at least read a character
    cin.get();
}
相关问题