zoukankan      html  css  js  c++  java
  • 字符串问题之 字符串中的数字子串求和

    要求

     1、 忽略小数点 如 A1.3 包含的是两个数字 1 和 3

     2、紧贴数字子串的左侧出现字符“-”   连续次数为奇数时候 为负数 , 偶数时候为正数。

       比如: “A-1BC--12”   其中包含数字为-1 和 12

      str="A1CD2E33"  返回36

      str="A-1B--2C--D6E"  返回7

    这个题目的实现方法有很多种,下面我来给大家演示一种哈~~~~~

    这个题目就是实现 如何从左到右遍历str时,准确收集每个数字并累加起来

        实现步骤:

        三个变量 int  res  表示目前的累加和

                      int num 表示当前收集到的数字

                       boolean posi 表示如果把num累加到res里, num是正还是负 

                    

    package TT;
    
    public class test2 {
    
         public static int numSum(String str){
             
             if(str==null){
                 return 0;
             }
             
             
             char[] charArr = str.toCharArray();
             int res = 0;
             int num =0;
             boolean posi = true;
             int cur = 0;
             for(int i =0; i<charArr.length; i++){
                 cur = charArr[i]-'0';
                 if(cur<0 || cur>9){
                     res+=num;
                     num = 0;
                     if(charArr[i]=='-'){
                         
                         if(i-1>-1 && charArr[i-1]=='-'){
                             posi=!posi;
                         }else{
                             posi = true;
                         }
                         
                     }
                 }else{
                     num = num * 10 + (posi ? cur : -cur);
                 }
                 
                 
             }
             
             
             res += num;
             return res;
             
             
         }    
        
        
    
        public static void main(String[] args){
             String str ="A1CD2E33";
               int a = numSum(str);
               System.out.println(a);
            
        }
        
        
    
        
    }

    结果:36

    public class t3 {
        public static Integer getSubSum(String str){
            char[] chars = str.toCharArray();
            //所有number的累加
            int sum = 0;
            //整理数据值
            int number = 0;
            //'-'符号的计算
            int negativeCount = 0;
            //countFlag 决定是否进行计算
            boolean countFlag = true;
            for (int i =0 ; i< chars.length; i++){
                char nowChar = chars[i];
                //对于正负数的统计使用
                if (nowChar == '-' && chars[i-1] != '-'){
                    negativeCount = 1;
                }
                if (nowChar == '-' && chars[i-1] == '-'){
                    negativeCount++;
                }
                //数据number的计算
                int now = chars[i] - '0';
                if ( 0 < now  && now < 9 ){
                    //将字符组合成数字
                    number = number * 10 + now;
                    countFlag = true;
                } else { //所有number的累加
                        //正数情况
                        if (negativeCount % 2 == 0 && countFlag) {
                            sum = sum + number;
                        } else {
                            //负数情况
                            if (countFlag) {
                                sum = sum - number;
                            }
                        }
                        //计算完毕后的清理
                        //运算结束 number 清空
                        number = 0;
                        countFlag = false;
                }
            }
            //最后的不能遗漏
            if (0 < chars[chars.length-1] - '0' || chars[chars.length-1] - '0'< 9){
                sum = sum + number;
            }
    
            return sum;
        }
        public static void main(String[] args){
            String testStr = "A1CD2E33";
            Integer subSum = getSubSum(testStr);
            System.out.println(subSum);
        }
    }

  • 相关阅读:
    BM求递推式模板
    主席树浅谈
    DSU on Tree浅谈
    树链剖分浅谈
    省选模拟八 题解
    提答题 总结
    交互题 总结
    省选模拟七 题解
    省选模拟六 题解
    省选模拟五 题解
  • 原文地址:https://www.cnblogs.com/toov5/p/7359972.html
Copyright © 2011-2022 走看看