QT字符串中取数字

QString str = "7FW09";
    QString tmp,text;
    for(int j = 0; j < str.length(); j++)
    {
    if(str[j] >= '0' && str[j] <= '9')
    tmp.append(str[j]);
    }
    text=tmp.mid(tmp.size()-2,2);//截取后两位
    qDebug()<<tmp<<"---->"<<text;
<think>我们被要求从字符串提取数字,参考了多个引用,提供了几种方法。用户的需求是使用Qt字符串提取数字。 根据引用,我们可以总结出以下几种方法: 1. 使用QRegExp正则表达式(引用1、3、4) 2. 使用循环遍历字符串,逐个字符判断(引用2) 3. 使用sscanf(引用1,但注意sscanf是C函数,需要将QString转换为char*) 我们将分别介绍这些方法,并给出示例代码。 注意:引用中有些方法使用了QRegExp,但需要注意的是,Qt 5.0以后推荐使用QRegularExpression,但QRegExp仍然可用。不过为了与引用一致,我们先使用QRegExp,同时也会提到QRegularExpression。 步骤: 1. 方法一:使用QRegExp提取所有数字(匹配连续的数字) 2. 方法二:遍历字符串提取数字字符 3. 方法三:使用sscanf(适用于字符串开头就是数字的情况) 另外,我们还可以使用QString的方法,例如使用split等,但这里引用中没有提到,我们可以根据需求补充。 但是,用户的需求可能包括提取字符串中的所有数字(可能有多组数字),或者只提取第一组连续数字。我们将分别说明。 根据引用1,方法一可以提取出第一组连续数字(注意,它在一个循环中,但只了最后一次匹配,实际上应该第一次或全部,这里我们调整一下)。 下面我们详细说明。</think>在Qt中从字符串提取数字,以下是几种常用方法及代码示例: ### 一、正则表达式法(推荐) ```cpp // 提取字符串中所有连续数字(返回第一个匹配项) QString str = "Item123Price45"; QRegExp rx("(\\d+)"); // 匹配连续数字 if (rx.indexIn(str) != -1) { int num = rx.cap(1).toInt(); // 123 } // 提取所有数字(多组匹配) QStringList numList; int pos = 0; while ((pos = rx.indexIn(str, pos)) != -1) { numList << rx.cap(1); pos += rx.matchedLength(); } // numList: ["123", "45"] ``` **特点**: - 使用`QRegExp("\\d+")`匹配连续数字 - `cap(1)`获捕获组内容 - 适合复杂字符串模式匹配[^1][^3][^4] --- ### 二、字符遍历法 ```cpp QString str = "A7B12C"; QString digits; for (int i = 0; i < str.length(); ++i) { if (str[i].isDigit()) digits.append(str[i]); } // digits = "712" ``` **特点**: - 使用`QChar::isDigit()`判断数字字符 - 简单高效,适合基础需求[^2] --- ### 三、sscanf函数法 ```cpp QString str = "99%"; char buf[32]; sscanf(str.toLatin1().data(), "%[0-9]", buf); // 提取头部连续数字 int num = atoi(buf); // 99 ``` **特点**: - 利用C标准库的格式化输入 - 仅适合数字字符串开头的情况[^1] --- ### 四、QRegularExpression(Qt5+推荐) ```cpp // 现代正则API(Qt5.0+) QString str = "Version5.2.1"; QRegularExpression re("\\d+"); QRegularExpressionMatchIterator it = re.globalMatch(str); while (it.hasNext()) { QRegularExpressionMatch match = it.next(); qDebug() << match.captured(0); // 输出"5", "2", "1" } ``` ### 选择建议 | 方法 | 适用场景 | |--------------------|----------------------------------| | 正则表达式 | 需提取多组数字/复杂文本模式 | | 字符遍历 | 简单提取所有数字字符 | | sscanf | 数字字符串开头且格式已知 | | QRegularExpression | Qt5+项目,需更强大的正则功能 | > 注意:若需提取特定位置数字(如最后两位),可在遍历或正则匹配后使用`mid()`截[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值