【題目】
給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下:
忽略小數點字元,例如「a1.3」,其中包含兩個數字1和3.
如果緊貼數字子串的左側出現字元「-」,當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,「a-1bc- -12」,其中包含數字-1和12。
【舉例】
str = 「a1cd2e33」返回36.
str = 「a-1b- -2c- -d6e」,返回7。
【基本思路】
使用三個變數。res,num和posi。res表示目前的累加和,num表示當前收集到的數字,posi表示數字num是正數還是負數,true表示正數,初始時res = 0, num = 0, posi = true。
從左到右依次遍歷字串,假設遍歷到的字元為char。情況分析如下:
1)如果char是 『0』 ~ 『9』,假設之前收集的數字為num,則可以根據posi更新num的值,如果posi == true,則num = num×10 + (char - 『0』),否則num = num×10 - (char - 『0』)。posi的更新方法之後解釋。
2)如果char不是 『0』 ~ 『9』,則說明num已經是乙個完整的數字了,該累加到res了,所以res += num,然後令num = 0。累加完後觀察此時char的值,如果此時的字元不是「-」,則令posi = true,如果此時的字元為「-」,判斷前乙個字元是否也是「-」,如果是的話,令 posi = !posi,否則令posi = false。
既然我們把累加的時機放在了char不是數字字元的時候,那麼如果str是以數字字元結尾的,那麼就會出現最後乙個字元沒有累加的情況。所以遍歷完成後,還要再加一次num。
下面是使用python3.5實現的**
#字串中數字子串的求和
defnumsum
(str1):
if str1 == none
or len(str1) == 0:
return
0 res = 0
num = 0
cur = 0
posi = true
for i in range(len(str1)):
cur = ord(str1[i]) - ord('0')
if cur < 0
or cur > 9:
res += num
num = 0
if str1[i] == '-':
if i - 1 >= 0
and str1[i-1] == '-':
posi = not posi
else:
posi = false
else:
pose = true
else:
num = num * 10 + cur if posi else -cur
res += num
return res
字串問題 字串的統計字串
題目 給定乙個字串str,返回str的統計字串。例如,aaabbadddffc 的統計字串為 a 3 b 2 1 d 3 f 2 c 1 補充題目 給定乙個字串的統計字串cstr,再給定乙個整數index,返回cstr所代表的原始字串上第index個字元。例如,a 1 b 100 所代表的原始字串上...
字串 字串中數字子串的求和
題目 給定乙個字串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 這個題目的實現方法有很多種,...