使用 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 分配更多内存,但当我打印变量的大小时,它仍然显示更少的内存/字节? [复制]

使用 stringstream 浮动的字符串

c++字符串转化为数字

Python :MNIST手写数据集识别 + 手写板程序 最详细,直接放心,大胆地抄!跑不通找我,我包教!

用stringstream实现从数字到字符串的转化