C++ 如何从字符串中解析double?

C++ 如何从字符串中解析double?,c++,C++,我有以下代码,但它只将字符串转换为double。如果字符串包含字母,则会导致错误 while (cin >> s){ const char *c_ptr=s.c_str(); d = atof(c_ptr); v.push_back(d); } 我想输入一个类似“a1.2 3 4b”的字符串,并用“1.2 3 4”填充向量 1) replace all chars in the string that aren't digi

我有以下代码,但它只将字符串转换为double。如果字符串包含字母,则会导致错误

 while (cin >> s){
        const char *c_ptr=s.c_str();
        d = atof(c_ptr);
        v.push_back(d);
    }
我想输入一个类似“a1.2 3 4b”的字符串,并用“1.2 3 4”填充向量

1) replace all chars in the string that aren't digits or decimal points by spaces
2) read doubles in a loop
由于在解析双精度字符之前已经去掉了字母,因此它们不会再引起问题。

这是怎么回事:

1) replace all chars in the string that aren't digits or decimal points by spaces
2) read doubles in a loop

因为在解析双精度字符之前,您已经去掉了字母,所以它们不会再引起问题。

sscanf只有在您知道提前读取了多少双精度字符以及字符串包含哪些非数字字符时才有效。如果输入为“4a1.2”,该怎么办?向量中应该有多少个数字?如果只有一个,它的值应该是什么?你必须精确地定义你的输入来匹配C++类型Ichar双空间int,否则你必须使用ReXeX这是一个错误的二分法,@Adrian.sscanf只有在您知道提前读取的双倍数以及字符串包含哪些非数字字符时才起作用。如果输入为“4a1.2”,该怎么办?向量中应该有多少个数字?如果只有一个,它的值应该是什么?你必须精确地定义你的输入来匹配C++类型Ichar双空间int,否则你必须使用ReXEX,这是一个错误的二分法,@阿德里安。听起来是个好主意。如何使用replace函数替换这些字符?我无法让str.replace()在c++P.S.上工作。您可能希望在步骤2中使用istringstream,因为上面的代码只能从每个字符串中获得一个双精度。举个例子,我能想到的最简单的方法就是自己在for循环中进行替换。这里可以看到一个类似的例子,听起来是个好主意。如何使用replace函数替换这些字符?我无法让str.replace()在c++P.S.上工作。您可能希望在步骤2中使用istringstream,因为上面的代码只能从每个字符串中获得一个双精度。举个例子,我能想到的最简单的方法就是自己在for循环中进行替换。这里可以看到一个类似的例子