您的位置:首页 > 其它

改进版---字符串中数字子串的求和

2017-06-13 18:20 274 查看
【题目】

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

【原始要求】

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

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

【新增要求】

  1、考虑这种情况,”-12-a-2c—d6a”,其中包含的数字为-12,2,-6,返回值为-16。如果采用书中的原始代码思路,不能处理这种负号不连续的情况,所以对代码进行了改进。

【举例】

  str=”“,返回36;

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

class Transform {
public:
int numSum(string str) {
int len = str.length();
if(len <= 0)        //当字符串不合法时返回0
return 0;

int num = 0;    //当前数字
int sum = 0;    //总和
int flag = 1;   //正负号

for(int i = 0; i < len; ++i){
if(str[i] == '-' ){
flag *= -1;
}
else{
if(str[i] <= '9' && str[i] >= '0'){
//当前字符为数字时,更新num
num = num * 10 + flag * (str[i]-'0');

//如果当前字符的下一个字符不为数字,或者已经到了字符串尾部
//将num加到总和sum上,并重置num和flag
if(i+1 < len && (str[i+1] > '9' || str[i+1] < '0')){
sum<
9d0b
/span> += num;
num = 0;
flag = 1;
}
}
}
}
sum += num;
return sum;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: