c++ - 我可以使用 stringstream 判断 std::string 是否代表数字吗?

标签 c++ numbers stringstream words

显然这应该用于显示字符串是否为数字,例如“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/

相关文章:

PHP 将数字加一

wpf - 使用小数分隔符格式化 XAML 中的值?

c# - OpenCV:Matrix.cpp 中的未知数组类型错误

c++ - 释放动态内存

c++ - 我必须手动重新抛出异常吗?

c++ - 使用 libc++ 和 libstdc++ 的 void* 类型的字符串流行为差异

C++ 字符串流段错误

c++ - 使用 std::vector<int> 的 C++ 多项式类的 std::out_of_range

java - ClassCastException 异常处理和类创建需要帮助

c++ - stringstream clear 和 str 有什么区别