显然这应该用于显示字符串是否为数字,例如“12.5”== yes,“abc”== no。但是我对输入毫无顾忌。
std::stringstream ss("2");
double d; ss >> d;
if(ss.good()) {std::cout<<"number"<<std::endl;}
else {std::cout<<"other"<<std::endl;}
最佳答案
不要使用 good()!测试流是否为 failed or not :
if (ss)
Good 告诉您是否设置了 eofbit、badbit 或 failbit 中的任何一个,而 fail() 告诉您有关 badbit 和 failbit 的信息。您几乎从不关心 eofbit 除非您已经知道流失败,因此您几乎不想使用 good。
请注意,直接测试流,如上,完全等同于:
if (!ss.fail())
相反,!ss 等同于 ss.fail()。
将提取组合到条件表达式中:
if (ss >> d) {/*...*/}
完全等同于:
ss >> d;
if (ss) {/*...*/}
但是,您可能想测试是否可以将完整的字符串转换为 double ,这有点复杂。使用已经处理所有情况的 boost::lexical_cast。
关于c++ - 我可以使用 stringstream 判断 std::string 是否代表数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917265/