显然,这应该用于显示字符串是否是数字,例如“12.5”==是,“abc”==否。然而,无论输入什么,我都会得到一个“否”。
std::stringstream ss("2");
double d; ss >> d;
if(ss.good()) {std::cout<<"number"<<std::endl;}
else {std::cout<<"other"<<std::endl;}
不要使用good()!测试流是否失败与否 http://codepad.org/ygisKfA9:
if (ss)
Good 告诉您是否设置了 eofbit、badbit 或 failurebit,而 failed() 则告诉您 badbit 和 failurebit。你几乎从不关心 eofbit 除非你already知道流失败了,所以你几乎永远不想使用好的。
请注意,如上所述直接测试流完全等同于:
if (!ss.fail())
相反,!ss 相当于 ss.fail()。
将提取的内容合并到条件表达式中:
if (ss >> d) {/*...*/}
完全等同于:
ss >> d;
if (ss) {/*...*/}
但是,您可能想测试完整的字符串是否可以转换为双精度型,这有点复杂。使用已经处理所有情况的 boost::lexical_cast 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)