c ++如何从具有反斜杠的字符串中提取数字?

c++ How to extract numbers from a string that has backslash?

我正在尝试从字符串中提取数字。 我想将每个数字保存到一个单独的双变量中。 我目前尝试使用像这样的简单字符串流。

std::string line = "100.24564262460.26243624360.136213477347";
std::stringstream stream(line);
stream.precision(20);
double a,b,c;
stream >> a >> b >> c;

不仅精度不对(只打印出6位),而且只提取了第一个数a(100.245),b和c为null。我怀疑这是由于反斜杠引起的,但我不太确定。

读取每个数字之间包含反斜杠的字符串并以正确的精度存储整个数字的最佳方法是什么?

您可以使用带分隔符的 getline 将字符串拆分为元素向量,并使用 atof 沿着这些行提取浮点数

vector<string> elems;
stringstream stream(line);
string item;
while (getline(stream, item, "\")) {
  elems.push_back(item);
}
vector<float> val(elems.size());
...
val[i]=atof(elems[i].c_str())

这里的精度更多的是表现形式,您可以在 setprecision 的帮助下进行自定义。例如,

#include <iomanip>
... 
cerr << setprecision(6) << val[i] << endl;

将输出截断到六位有效数字。

另一件事是确保存储直到最后一位的所有数字。为了确保存储所有数字,您定义的浮点数的大小必须足够大以包含您的数据,并且 atof 可能需要被适当的解析器替换,如果浮点数应该被替换为 double 或其他东西。