非常简单的问题...... Qt中是否有任何预定义的函数可以确定字符串是否只包含一个数字? ..有效的条目,如“28”和无效的条目,如“28”,“28”和“2a8 ....?
答案 0 :(得分:5)
如果您尝试验证用户的输入,请查看QValidator及其子类。
如果您尝试将字符串中的输入转换为数字,请查看QString类中的toInt等方法。
答案 1 :(得分:1)
最简单的可能是检查字符串是否包含任何空格 - 如果它确实失败了。然后使用strtod和/或strtol检查有效号码。
#include <string>
#include <cstdlib>
#include <cassert>
bool HasSpaces( const std::string & s ) {
return s.find( ' ' ) != std::string::npos;
}
bool IsInt( const std::string & s ) {
if ( HasSpaces( s ) ) {
return false;
}
char * p;
strtol( s.c_str(), & p, 10 ); // base 10 numbers
return * p == 0;
}
bool IsReal( const std::string & s ) {
if ( HasSpaces( s ) ) {
return false;
}
char * p;
strtod( s.c_str(), & p );
return * p == 0;
}
int main() {
assert( IsReal( "1.23" ) );
assert( IsInt( "1" ) );
assert( IsInt( "-1" ) );
assert( IsReal( "-1" ) );
assert( ! IsInt( "1a" ) );
assert( ! IsInt( " 1" ) );
}
请注意上面的代码; y适用于C ++实现的数值范围内的数字 - 例如,对于任意大的整数,它将无法正常工作。
答案 2 :(得分:1)
好吧,我假设数字你的意思是整数。你可以这样走。
int QString::toInt ( bool * ok = 0, int base = 10 ) const
从文档中
如果发生转换错误,* ok设置为false;否则* ok设置为true。
因此,在调用该函数后,检查ok
的值。如果它是true
(即如果字符串可以转换为数字),则您的字符串只有数字。
如果你的号码是双倍的,你可以使用这个功能。
double QString::toDouble ( bool * ok = 0 ) const
更多文档&amp;示例可见here
希望有所帮助......
答案 3 :(得分:0)
我同意最简单的方法是使用toInt()和相关函数转换为数字并检查布尔参数,但你也可以使用qstring :: at()并在返回值上调用isdigit这(循环遍历字符串)
myString.at(i).isDigit()
如果位置i的字符是数字,则返回true,这样你就可以创建一个带字符串的简单函数,如果字符是数字则返回true