C++ c++;如何从带有反斜杠的字符串中提取数字?
我试图从字符串中提取数字。 我想将每个数字保存到一个单独的双变量中。 我目前尝试使用这样一个简单的stringstreamC++ c++;如何从带有反斜杠的字符串中提取数字?,c++,regex,string,extract,precision,C++,Regex,String,Extract,Precision,我试图从字符串中提取数字。 我想将每个数字保存到一个单独的双变量中。 我目前尝试使用这样一个简单的stringstream std::string line = "100.2456426246\200.2624362436\300.136213477347"; std::stringstream stream(line); stream.precision(20); double a,b,c; stream >> a >> b >> c; 不仅精度错误(仅打
std::string line = "100.2456426246\200.2624362436\300.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())
将输出截断为六位有效数字
另一件事是确保存储到最后一位的所有数字。为了确保所有数字都被存储,只需定义的浮点的大小必须足够大以容纳数据,如果浮点应该被
双精度
或其他东西替换,则可能需要用适当的解析器替换atof
。它怎么可能知道您要在斜杠上拆分字符串?例如“仅6位”:字符串“100.2456426246\200.2624362436\300.136213477347”
不包含任何反斜杠!但它确实包含一些不寻常的非ASCII字符。首先,您需要转义字符串文本中的反斜杠-“100.2222\\2000.2000\\300.333”“
@Drop如果我算对了,double
应该在小数点后的100附近有一个很好的13位精度。非常感谢,这对我帮助很大!
#include <iomanip>
...
cerr << setprecision(6) << val[i] << endl;