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

Posted

技术标签:

【中文标题】如何检测 QString 是不是由所有数字字符组成?【英文标题】:How to detect if a QString is made up of all numeric characters?如何检测 QString 是否由所有数字字符组成? 【发布时间】:2012-01-09 16:06:08 【问题描述】:

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

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

我是否必须一次一个地遍历每个字符,还是有一种我没有想到的更优雅的方式?

【问题讨论】:

你对“更优雅”的定义是什么?您肯定必须以一种或另一种方式查看每个字符,无论是隐藏在某个函数后面还是在自定义循环中。 @Wes。如果我能给你一个建议,那就是花 1 到 2 天的时间来学习正则表达式。它们的语法在所有语言中几乎相同。我注意到您的一些问题与此类似。当你拥有 regexp 的力量时,你将能够做一些你最初没有想到的强大的事情。只是说。 是的,我认为这也是一个好主意。我最近才遇到他们。我想我需要练习。好主意UmNyobe。谢谢! @UmNyobe 我同意你的观点,我刚刚花了他们 【参考方案1】:

你可以使用regular expression,像这样:

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

【讨论】:

感谢您的回复。但问题是:为什么它是 "\\d*" 而不仅仅是 "\d*" ? 因为在 C 中写字符串时,\ 具有特殊的含义。例如"\n" 是换行符,而不是后跟字母“n”的反斜杠字符。如果你真的想要一个文字反斜杠字符,你必须写 \\. ^$ 不需要,因为精确匹配并注意标志!然后:[-+]?[0-9]* @AdUki 破折号不是数字字符,因此会导致测试不正确。 @JohannesSchaub-litb 不正确。方括号表示字符类,破折号表示“在范围内”。所以:0 到 9 范围内的一个字符。【参考方案2】:

QString::​toInt 就是你要找的。​​p>

int QString::​toInt(bool * ok = 0, int base = 10) const

返回使用 base base 转换为 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

【讨论】:

它仅适用于小于最大整数值 2,147,483,647 的数字 如果数字是 0 怎么办?它会返回 0,你会认为转换失败,而它不是真的。 @Nulik 在这种情况下,您应该针对ok 断言,这将设置为true 关于toInt 幅度限制 - 请注意QByteArray 具有toULongLong( &amp;ok ) 和其他类似的功能。【参考方案3】:

我们可以像下面的代码那样遍历每个字符:

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

【讨论】:

以上是关于如何检测 QString 是不是由所有数字字符组成?的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:检测密码由6-20字母和数字组成

字符串的常用操作2

检查/确定 QString 是不是包含 html

如何检测字符串是不是至少包含一个数字?

如何由qstring转化为char数组

isalnum()方法