字串中數字子串的求和

2021-07-10 23:56:41 字數 1417 閱讀 9582

題目:

給定乙個字串str,求其中全部數字串所代表的數字之和。

要求:

忽略小數點字元,如"a1.3",其中包含兩個數字1和3;

如果緊貼數字子川的左側出現字元"-",當連續出現的數量為奇數時,則數字視為負,偶數時,則數字視為正。如"a-1bc--12",其中包含數字為-1和12。

舉例:

str="a1cd2e33",返回36;

str="a-1b--2c--d6e",返回7。

難度:

思路:(考慮問題不全面)

以前對於這種題目,慣用方法是巢狀迴圈,這樣雖然也能實現,但時間複雜度就是o(n^2)數量級的,達不到練習的目的。

對於這種題目,對整個字串進行遍歷,在遍歷的過程中對每個字元進行相應處理。

在迴圈遍歷中,我分成三種情況討論,一種是數字字元,一種是'-'字元,一種是其他情形;並對不同的情形做不同處理。

若是數字字元,對其進行數字識別;若是'-'字元,則對符號位取反;若是其他情形,則根據符號位決定數字的正負,將其累加,並將符號位和數字變數置零。

**:

#include #include using namespace std;

int main()

} cout << sum << endl;

system("pause");

return 0;

}

本以為我考慮的比較全面了,但是查閱書本上的講解,發現其實有很多疏漏。

如"-1-2-3",應該返回-6,但程式給出的結果是0。這就是沒有考慮到'-'字元也是作為數字識別結束的標誌;

而且對於邊界問題,考慮的也不全面。so, this is not a good solution......

對字串進行遍歷,判斷每個字元是數字字元還是非數字字元。

如果是數字字元,更新數字變數;如果是非數字字元,首先判斷符號標誌位確定正負,再累加,對數字變數置零;並判斷給非數字字元是否為'-',如果該位字元是'-',則判斷前乙個字元是否也是'-',如果前乙個是'-',則對符號標誌位取反;若不是,則對符號標誌位置一;如果該位字元不是『-』,對符號標誌位置零。

注意,對於最後一位是數字,則需要對其進行單獨考慮。

#include #include using namespace std;

int main()

} else

else

flag = 0;

} }cout << sum << endl;

system("pause");

return 0;

}

字串中數字子串求和

題目 給定乙個字串s,求其中全部數字串所代表的數字之和。要求 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3。如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字為 1和12。舉例 s a1.3 返...

字串 字串中數字子串的求和

題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...

字串中數字子串求和問題

輸入 ab34c57ddo 輸出 91 輸入 1ab 2c78 輸出 79 說明 奇數個 表示負號,偶數個 表示正號 下面這個思路又麻煩又複雜,還只能實現正號的操作,愚蠢至極,記錄一下豈不也快哉 下面這個方法將字串遍歷一次,將找到連續的數字字串存放到vectorsub中,然後再將所有的sub存放到v...