[英]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.