簡體   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