繁体   English   中英

如何解析字符串并获取字符串QT的特定部分

[英]How to parse string and get the specific part of string QT

这是我在Qt第一个项目

我在Qt有项目,我有一个像这样的字符串

"0044RQ039PR006000000AM009123456789CU003364PD0011"

我怎样才能像这样在AM之后获得号码

QString firstThreeNumbers = "009"     //first 3 number's

QString restOfNumbers = "123456789"   //rest of number's

AM的位置是动态的,可能看起来像这样

"AM0091234567890044RQ039PR006000000CU003364PD0011"

也许像下面这样的东西会起作用

QString str = "0044RQ039PR006000000AM009123456789CU003364PD0011";

int index = str.IndexOf("AM");
if (index >= 0)
{
    QString number;
    index += 2;
    while (index < str.size() && str[index].isDigit())
    {
        number += str[index];
    }
}

编辑:我看到 Marco 已经使用Qt了答案,我建议使用它,因为它更符合您的需要。 不过我会把它留在这里以供参考。

我无权访问Qt环境,但这是您可以在标准C++执行此操作的方式:

std::string s = "0044RQ039PR006000000AM009123456789CU003364PD0011";

int am_pos = 0;

for (std::string::size_type i = 0; i < s.size(); i++) {
    if (s[i] == 'A' && s[i + 1] == 'M') {
        am_pos = i;
        break;
    }
}

std::vector<char> first3Int;

std::vector<char> restInt;

for (std::string::size_type i = am_pos; i < s.size(); i++) {
    if (first3Int.size() < 3) {
        if (isdigit(s[i]))
            first3Int.push_back(s[i]);
    }
    else {
        if (isdigit(s[i]))
            restInt.push_back(s[i]);
        else
            break;
    }
}

for (int i = 0; i < first3Int.size(); i++) {
    std::cout << first3Int[i];
}

std::cout << std::endl;

for (int i = 0; i < restInt.size(); i++) {
    std::cout << restInt[i];
}

我们首先遍历字符串以找到AM的出现,并将该位置存储在am_pos 然后,我们有两个vector<char> s 来存储int s(它们是char s,因为它们是字符串的一部分,如果您需要另一种数据类型的它们,我们可以做一个简单的转换)。

am_pos开始再次遍历字符串,并根据您通过isdigit()找到的int ,存储到适当的vector 一旦您在移动通过前 3 位数字后遇到第一个非数字,我们将打破循环以停止存储更多数字。

正则表达式怎么样?

(AM)([0-9]{3})([0-9]*)

第一组是您的AM ,然后是 3 个必填数字,然后是其余数字。 你有3个重要的小组+完整的比赛。

你可以在这里玩它

似乎它可以与QString一起使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM