-4

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

例子

字符串: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);
}
4

3 回答 3

0

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

于 2013-05-27T20:59:22.123 回答
0

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

于 2013-05-27T21:04:30.840 回答
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();
}
于 2013-05-27T21:08:32.740 回答