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

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

本文关键字:字符串 数字 提取 c++      更新时间:2023-10-16

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

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

不仅精度错误(只打印出6位数字),它只提取第一个数字a(100.245),b和c为空。我怀疑这是由于反斜杠,但我不完全确定。

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

您可以使用带分隔符的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;

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

另一个问题是确保存储最后一位之前的所有数字。为了确保存储所有数字,只需定义的float的大小必须足够大以包含数据,如果float应该被double或其他东西替换,则atof可能需要被适当的解析器替换。