是否有任何预定义的函数可以确定字符串是否只包含一个数字?

时间:2010-07-03 21:07:07

标签: c++ qt

非常简单的问题...... Qt中是否有任何预定义的函数可以确定字符串是否只包含一个数字? ..有效的条目,如“28”和无效的条目,如“28”,“28”和“2a8 ....?

4 个答案:

答案 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