gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:04 25 4
gpt4 key购买 nike

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com