字符串问题---字符串中数字子串的求和
来源:互联网 发布:智百盛汽修汽配软件 编辑:程序博客网 时间:2024/05/29 10:22
【题目】
给定一个字符串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实现的代码
#字符串中数字子串的求和def numSum(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
阅读全文
2 0
- 字符串问题---字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 求字符串中数字子串求和
- 5.2 字符串中数字子串的求和
- 改进版---字符串中数字子串的求和
- 字符串之数字子串求和
- 对字符串中的数字子串求和
- C++字符串数字子串求和
- [编程之美-08]字符串中数字子串的求和
- 字符串中最长的数字子串
- 字符串中最长子串的问题
- android inflater 用法&音乐播放器
- 慕课笔记--[课程]进击Node.js基础(二)
- 如何理解python装饰器
- 25 Three.js的点光源THREE.PointLight
- 启动tomcat出现一下错误: org.springframework.beans.factory.BeanCreationException: Error creating bean with n
- 字符串问题---字符串中数字子串的求和
- 股票记录-2017-8-17晚上总结
- POJ
- 【微观】微观经济分析笔记(一)
- 有关蓝牙的小心得
- round 2
- Mysql 分表分区
- Gemini 2 for mac 苹果重复文件查找与清理 激活码 破解版下载
- 鸟哥私房菜中的“od -t oCc /etc/issue”的意思