字串中數字子串求和問題

2021-09-13 19:17:13 字數 2260 閱讀 9073

輸入:ab34c57ddo

輸出:91

輸入:-1ab--2c78

輸出:79

說明:奇數個『-』表示負號,偶數個『-』表示正號

下面這個思路又麻煩又複雜,還只能實現正號的操作,愚蠢至極,記錄一下豈不也快哉~下面這個方法將字串遍歷一次,將找到連續的數字字串存放到vectorsub中,然後再將所有的sub存放到v中,所以最後v存放的是vector,每個vector存放的是連續的數字的字串,然後遍歷一次將數字字串轉換成數字int型,存放到res容器中最後相加即可。

後來呀,上面的**簡直就是棄簡求繁的做法,同時還發現出現複數我這個**就不能正常工作了,他會將負號『-』當作乙個0-9之外的字元,自然不會存放起來,結果如下:

包含著string標頭檔案中,可以直接將乙個」98「的字串變成int型別的98.

回憶字元轉換成數字直接c-『0』即可

string s1 = "";

string s2 = "ab"

s1 = s1+s2;// "ab"

這個雖然看起來簡單,但是我每次遇到字串這個事情都沒有用[捂臉]

基本思路:學會字串的基本操作比如加法操作,將會解決很多其他方法比如上面那個愚蠢的方法。

迴圈遍歷字串,首先統計『-』號出現的次數,用cmath中pow實現奇偶為問題,用字串加法和stoi解決數字字串變成int的問題

#include#include#include#includeusing namespace std;

int main()

int flag = 0;

//掌握乙個思路是考慮字串出現迴圈的時候使用while建立內迴圈即可

//但是注意建立了內迴圈之後i已經自增,這次迴圈之後在大迴圈還要自增一次的,這樣會跳過乙個數的,但是不知道這個是不是'-'號,所以設定標誌位

while(s[i] >= '0'&&s[i] <= '9')

if (flag == 1)

--i;

//跳出這個迴圈之後肯定已經完成將連續的數字串都新增到str了

if (str != "")

str = "";

sign = 0;

} cout << sum << endl;

}}

測試結果:

最後總結一點:在字串中判斷是否迴圈出現連續型別的字元比如數字,可以使用while做內迴圈,但是應該注意while()內迴圈中i++了一次,考慮是否需要否則在大迴圈中還會i++一次跳過乙個數,比如上面**如果去掉後面flag的判斷實現--i將會跳過」ab3-1「中的『-』號,最後輸出的結果為4,但是實際我們想要的是2.

#include#include#includeusing namespace std;

int main()

while (s[i] >= '0'&&s[i] <= '9')

if (temp_str != "")

} cout << sum << endl;

}}

字串中數字子串求和

題目 給定乙個字串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...

字串問題之 字串中的數字子串求和

要求 1 忽略小數點 如 a1.3 包含的是兩個數字 1 和 3 2 緊貼數字子串的左側出現字元 連續次數為奇數時候 為負數 偶數時候為正數。比如 a 1bc 12 其中包含數字為 1 和 12 str a1cd2e33 返回36 str a 1b 2c d6e 返回7 這個題目的實現方法有很多種,...