字符串之数字子串求和
来源:互联网 发布:浙江大学宁波软件学院 编辑:程序博客网 时间:2024/05/31 18:59
题目:给定一个字符串str,求其中全部数字串所代表的数字之和
要求:
1、忽略小数点字符,例如“A1.3”,其中包括2个数字1和3
2、如果是紧贴数字子串的左侧出现字符“-”,当连续出现的数量为奇数时,则数字视为负,连续出现的数量为偶数的则 数字视为正,例如,“A-1BC--12”,其中包含数字为-1和12.
举例子:str="A1CD2E33",返回36
str="A-1B--2C--D6E"返回7
思路:
1 我们需要3个变量,一个是sum表示目前累加的和,为什么要sum这个变量,你不求和吗?求和肯定要用一个变量去接受之前累加的值,一个是整形变量num,表示当前收集定的数字,为什么要当前的数字,我插,题目中不是说了要加子串的数字吗?不定义怎么得到,布尔变量boo,如果num是正,boo=true,如果num为负,boo=false;
2 从左到右遍历str,假设遍历的字符cha,更具具体的cha有不同的处理,为什么要遍历,我插,不便利怎么得到我们需要中间的数据
3 比如str="123",初始时 num=0,boo=true,当cha=='1'时,num变成1,cha=='2',num==2,例如str="-123",初始num=0,boo=true,
cha=='-',boo=false,cha='1' num=-1,cha=='2' num=-12,总之,num=num*10+(boo?cur:-cur);
4 如果不是“0”-“9”,此时不管具体是什么,都是累加时,sum+=num,然后令num=0,累加完当然要清0,累加完成之后,在看cha是什么情况,如果不是‘-’,那么boo要变成true,如果cha不是数字字符也不是‘-’字符,boo变成true,如果cha='-',此时看cha的前一个字符,如果前一个字符也是‘-’字符,boo要改变符号,boo=!boo;否则令boo=false;
下面是java实现
public class SubStringNumSum { public static void main(String[] args) { int sum1=subStringSum("A1ee2E33"); int sum2=subStringSum("A-1B--2C--D6E"); int sum3=subStringSum("A1e3e2E03ds4-e-3-00-23"); System.out.println("sumOne\t"+sum1); System.out.println("sumTwo\t"+sum2); System.out.println("sumThree\t"+sum3);} public static int subStringSum(String string){ if(string==null){ return 0; } int sum=0; //求和变量 int num=0; //子串中需要累加的值 boolean boo=true; //值之前的符号代表,true为正数,false为负数 char cur='0'; //当前的字符 char[] arrays=string.toCharArray(); for(int i=0;i<arrays.length;i++){ cur=(char) (arrays[i]-'0'); if(cur<0 || cur>9){ //注意这个地方cur<'0'||cur>'9',因为你减去了’a‘,所以数字在0-9之间 sum+=num; // boo=true; num=0; //注意这个地方num要变成0 if(arrays[i]=='-'){ //注意这个地方不是cur=='-‘,而应该是arrays[i]=='-' if(i-1>-1&&arrays[i-1]=='-'){ //当第一个字符是'-',下面的boo=false, boo=!boo; //当‘-’连续的时候,为boo=!boo }else{ //例如‘-A-’最后一个是‘-’令boo=false,即为负数。 boo=false; //(因为‘-’前面3种可能,没有字符,为‘-’,不为‘-’ } }else{ boo=true;//只要‘-’结束,我们就应该变boo变成true. } }else{ num=num*10+(boo?cur:-cur); //累加中间的数字,如果前面是true,说明是正数,反正为负数 } } sum+=num; //最后一个数字要加上,注意 return sum; }}
结果:
sumOne36sumTwo7sumThree-13
总结:变量要定义好,然后多少个‘-’号用boolean类型的接受,因为只有2中可能,然后就是细节要分析到位。
- 字符串之数字子串求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 求字符串中数字子串求和
- 对字符串中的数字子串求和
- 字符串中数字子串的求和
- C++字符串数字子串求和
- 字符串中数字子串的求和
- 字符串中数字子串的求和
- 字符串问题---字符串中数字子串的求和
- [编程之美-08]字符串中数字子串的求和
- 5.2 字符串中数字子串的求和
- 改进版---字符串中数字子串的求和
- Storm之数字求和
- 字符串中最长的数字子串
- android 从Activity 获取 rootView 根节点
- READING NOTE: Learning to Segment Moving Objects in Videos
- iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)
- leetcode-Reverse Linked List
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- 字符串之数字子串求和
- 解析Android ListView工作原理及其缓存机制
- android 加密
- 字符串---求一个字符串中连续出现次数最多的子串
- Codevs_P1036 商务旅行(LCA)
- KMP
- 登入测试
- MyBatis(4)MyBatis入门程序
- android6 titlebar 详解