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

时间:2016-11-07 10:25:39

标签: 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。

1 个答案:

答案 0 :(得分:0)

如果您使用流提取运算符从流中提取values,则流将尽可能多地读取它可以解释为double并在达到某些数据时停止它无法合并。在您的情况下,如果您尝试将double作为double读取,则流将成功读取1.3067d作为双精度并将1.3067留下以供下一个操作读取。

由于字符串中有空格分隔的标记,因此解决此问题的一种方法是将每个标记作为字符串读取,然后,在完成此操作后,查看您提取的标记是否可以转换为{{1}没有错误。这是实现此目的的一种方法:

d