【发布时间】:2019-02-07 18:28:38
【问题描述】:
我正在编写一个函数来确定输入是否对应于所需的类型(int、double、float)
到目前为止,这是我的代码:
当我测试 int 输入时,我的问题就出现了。输入为 4.0,不接受所有小数等于 0。
我该如何解决这个问题?
#include<iostream>
#include<string>
#include<sstream>
template <typename T>
bool is_type(std::string Input)
{
std::stringstream ss(Input);
T test;
std::string remainder;
if (ss >> test)
{
ss >> remainder;
return (remainder.size() == 0) ? true : false;
}
else return false;
}
int main(void)
{
std::string Input;;
std::getline(std::cin, Input);
if (is_type<int>(Input)) std::cout << "It is valid input.\n";
return 0;
}
【问题讨论】:
-
您需要在执行转换之前分析字符串。有时正则表达式在这方面很有用。
-
所以您要求流提取运算符实际解析一个双精度数,然后检查双精度数是否可在不损失精度的情况下转换为整数?为什么不首先解析一个 double 并自己检查呢?
-
4.0 不是
int。.的存在使其成为浮点数。代码工作正常。你真的想要 4.0, 4.0000, ... 作为int接受吗?