字符串中数字子串的求和

来源:互联网 发布:免费x站最新 域名 编辑:程序博客网 时间:2024/05/15 13:41

字符串中数字子串的求和

【题目】

  给定一个字符串str,求其中全部数字串所代表的数字之和。

【要求】

  1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。

  2、如果紧贴数字子串的左侧出现字符'-',当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,"A-1BC--12",其中包含数字是-1和12。

【举例】

  str="",返回36;

  str="a-1b--2c--d6e",返回7;

【解答】

  

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner s = new Scanner(System.in);String str = s.next();System.out.println(numSum(str));}public static int numSum(String str) {char[] s = str.toCharArray();int sum = 0;// 所有数字之和int num = 0;// 保存当前连续的数字boolean flag = true;// 判断是否为负数,true为正数for (int i = 0; i < s.length; i++) {int cur = s[i] - '0';// 当前的字符if (cur >= 0 && cur <= 9) {// 不管cur之前字符是否为数字,累加numnum = num * 10 + (flag ? cur : -cur);} else {sum += num;// 遇到不是数字的字符,先把之前的数字num累加到sumnum = 0;// 遇到不是数字的字符,将num赋值为0if (s[i] == '-') {// 判断当前字符是否是'-'if (s[i - 1] == '-') {// 如果当前的'-'的上一个字符也是'-',则将flag取反。flag = !flag;} else {flag = false;// 如果当前的'-'上一个字符不是'-',需要将flag重新赋值为false}} else {flag = true;// 如果当前字符不是'-',需要将flag重新赋值为true,只有连续的'-'才会累加取反。}}}sum += num;return sum;}}


 


0 0
原创粉丝点击