c++ - 使用 stringstream 打印数字但是当我包括时,例如 1.3067d,但它仍然打印 1.3067

标签 c++ string numbers istringstream

#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;
}

使用 stringstream 打印数字,但是当我包含时,例如 1.3067d,但它仍然打印 1.3067。我怎样才能只打印号码?我希望它只打印 2.832 和 1.678。

最佳答案

如果您使用流提取运算符从流中提取一个 double,流将尽可能多地读取它可以解释为 double 并且当它到达一些它无法合并的数据时停止。在您的情况下,如果您尝试将 1.3067d 读取为 double ,则流将成功读取 1.3067 作为 double 并留下 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;
       }
    }
}

关于c++ - 使用 stringstream 打印数字但是当我包括时,例如 1.3067d,但它仍然打印 1.3067,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40462897/

相关文章:

javascript - 数数错误

javascript - 两个字节在任何地方都可以构成一个 Uint16,但在 Javascript 中却不然?

c++ - 我的函数的顺序重要吗?

c++ - 模板 `inline` 函数的静态局部变量

php - 如何仅在 PHP 中使用 str_replace() 删除一定次数的文本?

java - Java中根据优先级重新排序数组

c++ - ifstream::open() 到底做了什么?

c++ - 复制构造函数初始化初始化列表中的引用成员导致悬空指针

c - 为什么在这个程序中 strcpy() 函数会产生不需要的输出?

C 获取范围内的奇数并将其存储在 int 数组中