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