使用 stringstream 打印数字,但当我包含时,例如 1.3067d,但它仍然打印 1.3067
Posted
技术标签:
【中文标题】使用 stringstream 打印数字,但当我包含时,例如 1.3067d,但它仍然打印 1.3067【英文标题】:Using stringstream to print number but when i included, for example 1.3067d, but it still print 1.3067 【发布时间】:2016-11-07 10:25:39 【问题描述】:#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
istringstream iss("2.832 1.3067d nana 1.678");
double num = 0;
while(iss >> num || !iss.eof())
if(iss.fail())
iss.clear();
string dummy;
iss >> dummy;
continue;
cout << num << endl;
return 0;
。我怎样才能只打印号码?我希望它只打印 2.832 和 1.678。
【问题讨论】:
读取为字符串,然后使用std::stod
转换为数字。然后你可以像你一样检测输入中的错误。
【参考方案1】:
如果您使用流提取运算符从流中提取double
,则流将尽可能多地读取它可以解释为double
,并在它到达一些它可以的数据时停止' t 合并。在您的情况下,如果您尝试将 1.3067d
读取为双精度,则流将成功地将 1.3067
读取为双精度,并将 d
留在后面以供下一个操作读取。
由于您的字符串中有空格分隔的标记,解决此问题的一种方法是将每个标记作为字符串读取,然后,查看您提取的标记是否可以转换为 double
而无需错误。这是执行此操作的一种方法:
for (string token; iss >> token; )
istringstream converter(token);
double value;
if (converter >> value)
char leftover;
if (!(converter >> leftover))
/* Successfully read a double with no remaining garbage! */
cout << value << endl;
【讨论】:
以上是关于使用 stringstream 打印数字,但当我包含时,例如 1.3067d,但它仍然打印 1.3067的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在使用该值时得到一个 nil 值,但当我打印它时它显示为 none nil?
为啥尽管我在变量中使用 malloc 分配更多内存,但当我打印变量的大小时,它仍然显示更少的内存/字节? [复制]