[编程之美-08]字符串中数字子串的求和

来源:互联网 发布:网络通信协议图 编辑:程序博客网 时间:2024/05/29 09:59

[版权说明]
编程之美系列算法题集参考:
左程云 著《程序员代码面试指南IT名企算法与数据结构题目最优解》
July 著《编程之法面试和算法心得》
何海涛 著《剑指offer》
微软编程之美小组 著《编程之美》
部分题目摘选PAT、HDOJ、POJ以及各大互联网公司Google,BAT等面试题集。

博主采用C/C++语言实现(有些题目的解法进行优化)。希望编程之美系列博文没有侵犯版权!(若侵权,请联系我,邮箱:1511082629@nbu.edu.cn )
欢迎大家转载分享,编程之美系列算法题集,会不定期更新。鉴于博主本人水平有限,如有问题。恳请批评指正!

[Problem Description]
给定一个字符串str,求其中全部数字串所代表的数字之和。
要求:
1. 忽略小数点字符,例如”A1.3”,其中包含两个数字1和3
2. 如果紧贴数字子串的左侧出现字符”-“,当连续出现的数量为奇数时,则数字视为负数,连续出现的数量为偶数时,则数字视为正数。例如,”A-1BC–12”,其中包含数字为-1和12.

[Sample Input]
A1CD2E33
A-1B–2C–D6E

[Sample Output]
36
7

基本解法:题目意思简单,不详细阐述,详细见代码。

代码如下:

#include<iostream>  #include<string>  using namespace std;  int numSum(string str);  int main()  {      string s;      while(cin>>s)          cout<<numSum(s)<<endl;      return 0;  }   int numSum(string str)  {      if(str.empty())          return 0;      int res = 0, num = 0;      bool posi = true;      int cur = 0;      for(int i = 0; i < str.length(); i ++)      {          cur = str[i] - '0';          if(cur < 0 || cur > 9)          {              res += num;              num = 0;//num不要忘记置0               if(str[i] == '-')              {                  //注意i是否是大于等于0,以及考虑前一个是不是-                   if(i - 1 > -1 && str[i-1] == '-')                      posi = !posi;                  else                      posi = false;              }              else                  posi = true;          }          else              num = num*10 + (posi ? cur : -cur);//前一位是需要*10的       }      res += num;//最后一个num不要忘记加上       return res;  }  
0 0
原创粉丝点击