我正在创建一个名为 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/