c++ - 如何确定字符串中是否包含非数字?

标签 c++ string parsing double

我正在创建一个名为 Double 的类,它可以将字符串转换为 double 并将 double 转换为字符串。我需要一些方法来检查以确保当用户输入一个字符串时,该字符串没有任何不是数字的东西。如果字符串全是数字,则返回 false 的某种 bool 函数,如果其中包含非数字,则返回 true。到目前为止我已经

string test;
double d;

cout << "Enter a string: ";
cin >> test;

if(isNAN(test)) //isNAN (is Not A Number)
    cout << "Your entry cannot be converted";
else
{
    Double d1(test); //overloaded constructor takes a string
    cout << "Your string as a double is: " << d1.toDouble() << "\n\n";
}

我正在考虑制作一个循环来遍历字符串并测试每个字符,但这似乎有很多工作要做。是否有某种简单的函数可以确定字符串的任何部分是否不是数字?

此外,我正在使用 strstream 转换它,有点像这样:

strsteam ss;
string str = "123.45";
double d;

ss << str;
ss >> d;

return d;

如果我先转换它是否更容易检查非数字?

最佳答案

听起来您想确保整个字符串都转换为 double,即转换后没有剩余输入。验证这一点的简单方法是 eof():

std::istringstream ss( str.c_str() );
ss >> d;

// ss >> std::ws; if you want to ignore trailing whitespace

if ( ss && ss.eof() ) {
    return d; // successful conversion
} else {
    // input left over
}

对于懒惰的人,这可以写成一行:

double d;
if ( ( istringstream( str.c_str() ) >> d >> ws ).rdstate() == ios::eofbit ) {

关于c++ - 如何确定字符串中是否包含非数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773810/

相关文章:

c++ - 对象似乎没有通过C++的引用传递

C++17:使用通用可变参数 lambda 包装可调用对象

c++ - 分解字符串的逻辑问题

string - 更改/更改单元格值的第 N 个元素 Excel VBA

string - 如何拆分字符串并选择第 n 部分

java - 截断字符串并消除重复项的算法(不区分大小写)

parsing - 解析错误Unity 3D

c++ - 访问容器中的 unique_ptr 元素

c++ - 递归下降解析器问题

c++ - 解析 C++ 文件以进行编辑