我正在尝试验证字符串是否包含数字。我想看看字符串是否包含不允许的字符或更多字符,例如非数字和/或一个字符"。"
我的代码是
//this code is call function (is_number). sTempArray[3] is amount such as $00.00
if(!is_number(sTempArray[3]))
{
cout << "Your amount have letter(s) are not allowed!;
}
//the is_number is function and will run if anyone call this function.
bool MyThread::is_number(const string& data)
{
string::const_iterator it = data.begin();
while (it != data.end() && std::isdigit(*it))
{
++it;
}
return !data.empty() && it == data.end();
}
我想验证字符串是否允许。例如,string有一个值,它是500.00并且它将被允许但是它总是被拒绝,因为句点字符在字符串中。另一个例子,字符串有一个值,它是500.00a,不应该被允许。
答案 0 :(得分:0)
在is_number函数的while循环中,您可以添加if
语句来检查当前迭代是否为数字或检查它是否为&#34;。&#34;在其中(并且可能添加一个布尔值来检查是否只有一个&#34;。&#34;?)。
它看起来像这样:
bool MyThread::is_number(const string& data)
{
string::const_iterator it = data.begin();
while (it != data.end())
{
if (std::isdigit(*it) || it == "."){
++it;
}
}
return !data.empty() && it == data.end();
}
答案 1 :(得分:0)
如果已经满足点和数字,您可以添加布尔标志并修改循环:
bool MyThread::is_number(const string& data)
{
bool dot_met = false, digit_met = false;
for( string::const_iterator it = data.begin(); it != data.end(); ++it )
{
if( is_digit( *it ) ) {
digit_met = true;
continue;
}
if( *it == '.' ) {
if( !digit_met || dot_met ) return false;
dot_met = true;
continue;
}
return false;
}
return digit_met;
}
此表单中的函数不接受以#开头的数字。 (如.05)如果你真的想要,变化是微不足道的。或者,您可以使用带有"\\d+\\.?\\d*"
表达式的regual表达式库。