如何检测 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( &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 是不是由所有数字字符组成?的主要内容,如果未能解决你的问题,请参考以下文章