如何检查字符串输入是否为有效的双精度
How can I check a string input to be a valid double?
这是我的代码。我正在创建一个程序,该程序接受字符串输入并将其转换为双精度。但是,我需要验证输入是否为有效的双精度。那么我该怎么做呢?例如,3.14 是有效的,但像 3.1.4、bob123 等的东西是无效的。
namespace validInput
{
bool IsValidDouble(string inputString)
{
int start = 0; // the index we will start looking for digits
bool valid = true; // assume valid for now
int decCount = 0;
// check for an empty string
if (inputString.length() < 1)
{
valid = false; // no need to check anything else
}
// next, check for a leading sign
else if (inputString.at(0) == '-'|| inputString.at(0) == '+')
{
start = 1; // start checking for digits after the sign
// check that there's at least one character after the sign
if (inputString.length() < 2)
{
valid = false; // no need to check anything else
}
}
// *****************************************
// CHECK FOR ONLY ONE DECIMAL IN INPUT
// *****************************************
return valid; // return true if valid, false if not
}
// Taking string, validating, converting to float(decimal)
double TryDoubleInput()
{
double dNumber;
string inputString;
//cin >> inputString; // accept a string input
getline(cin, inputString);
if (!IsValidDouble(inputString))
{
cerr << "Invalid input. Please enter a number: ";
dNumber = TryDoubleInput();
}
else
{
dNumber = atof(inputString.c_str()); // convert to an integer
}
return dNumber;
}
}
您可以使用
double strtod (const char* str, char** endptr)
成功后,该函数将转换后的浮点数作为双精度类型的值返回。如果无法执行有效的转换,则该函数返回零 (0.0(。如果正确的值超出了类型的可表示值范围,则返回正HUGE_VAL或负,并将 errno 设置为 ERANGE。
使用strtod
或sscanf("%*lf%n", &n)
,查看它从输入字符串中消耗了多少个字符。请记住,他们对有效双重表示的想法可能与您的不同。例如,它们允许前导空格和尾随任何内容。如有必要,可能需要进行一些额外的调整,以使您的检查更具限制性。
您使用什么转换方法?
我宁愿使用您的转换方法的错误机制,无论这是异常还是返回代码。
注意你应该使用inputString.empty()
,它更快。
相关文章:
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 模板签名解析为 void(void) 被 GCC 拒绝;这是否有效C++?
- 我如何知道作为参数的size_t在函数中是否有效?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 此递归模板类型定义是否有效C++?
- 将 C 函数转换为 C++ 以检查数字是否有效
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 如何检查输入是否有效?
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- 如何检查isupper(cstr)是否有效?
- 将 std::transform 与 std::back_inserter 一起使用是否有效?
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 创建加密安全密码.并验证它是否有效