如何检测QString是否由所有数字字符组成?

Wes*_*Wes 16 c++ qt qt4

判断a QString是否仅由数字组成的最佳方法是什么?

库中似乎没有便利功能QString.

我是否必须迭代每个角色,一次一个,或者是否有一种我没有想过的更优雅的方式?

sth*_*sth 27

您可以使用正则表达式,如下所示:

QRegExp re("\\d*");  // a digit (\d), zero or more times (*)
if (re.exactMatch(somestr))
   qDebug() << "all digits";
Run Code Online (Sandbox Code Playgroud)

  • 因为exactMatch而不需要`^`和`$`并注意标志!然后:`[ - +]?[0-9]*` (4认同)
  • 因为当你在C中写一个字符串时,\具有特殊含义.例如`"\n"`是换行符,而不是反斜杠字符,后跟字母"n".如果你真的想要一个字面反斜杠字符,你必须写\\. (3认同)

Ale*_*der 21

QString::?toInt 是你在找什么.

int QString::?toInt(bool * ok = 0, int base = 10) const
Run Code Online (Sandbox Code Playgroud)

返回使用基数转换为int的字符串,默认情况下为10,必须介于2和36之间,或者为0.如果转换失败,则返回0.如果发生转换错误,*ok设置为false; 否则*ok设置为true.

示例:

QString str = "FF";
bool ok;
int hex = str.toInt(&ok, 16);       // hex == 255, ok == true
int dec = str.toInt(&ok, 10);       // dec == 0, ok == false
Run Code Online (Sandbox Code Playgroud)

  • 它仅适用于小于最大整数值 2,147,483,647 的数字 (2认同)

Moh*_*san 5

我们可以像下面的代码一样迭代每个字符:

QString example = "12345abcd";
for (int i =0;i<example.size();i++)
{
    if (example[i].isDigit()) // to check if it is number!! 
        // do something
    else if (example[i].isLetter()) // to check if it is alphabet !!
        // do something
}
Run Code Online (Sandbox Code Playgroud)