簡體   English   中英

C ++字符串解析

[英]C++ string parsing

所有:

我在字符串解析中遇到一個問題:

現在,如果我有一個字符串,例如“ + 12 + 400-500 + 2:+ 13-50-510 + 20-66 + 20:”

我該如何計算每個細分的總和(:可以視為一個細分的結尾)。 就目前而言,我能弄清楚的只是用於遍歷和檢查+/-符號,但是我認為通用方法解決此類問題並不好:(

For example, the first segment, +12+400-500+2 = -86, and the second segment is
+13-50-510+20-66+20 = -573

1) The number of operand is varied( but they are always integer) 
2) The number of segment is varied
3) I need do it in C++ or C.

對於大多數新手來說,我並不認為這是一個非常簡單的問題,而且我將聲稱這不是一項家庭作業。 :)

最好,

由於字符串以冒號結尾,因此很容易使用findsubstr來分隔字符串中由':'分隔的部分,如下所示:

string all("+12+400-500+2:+13-50-510+20-66+20:");
int pos = 0;
for (;;) {
    int next = all.find(':', pos);
    if (next == string::npos) break;
    string expr(all.substr(pos, (next-pos)+1));
    cout << expr << endl;
    pos = next+1;
}

這會將原始字符串分成幾部分

+12+400-500+2:

+13-50-510+20-66+20:

由於istream的前導加號和前導減號,您可以使用>>運算符解析出數字:

istringstream iss(expr);
while (iss) {
    int n;
    iss >> n;
    cout << n << endl;
}

有了這兩部分,您可以輕松地將各個數字相加,並產生所需的輸出。 這是一個快速演示

您需要將操作數和運算符分開。 為此,您可以使用兩種隊列數據類型,一種用於操作數,另一種用於運算符

除以: ,然后除以+ ,再除以- 轉換為int ,您就在那里。

您的表達語言似乎很常規:您可以使用regex庫-例如boost::regex將數字,符號和段中的組直接匹配,例如

 ((([+-])([0-9]+))+)(:((([+-])([0-9]))+))+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM