【题目】
给定一个字符串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。