剑指offer49:把字符串转换成整数

1 题目描述

  将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

  输入描述:

  输入一个字符串,包括数字字母符号,可以为空

  输出描述:

  如果是合法的数值表达则返回该数字,否则返回0

  示例1
  输入
  +2147483647
    1a33
  输出
  2147483647 
  0

2 思路和方法,C++核心代码

边界条件: 数据上下 溢出;空字符串;只有正负号;有无正负号 。

 1 class Solution {
 2 public:
 3     int StrToInt(string str) {
 4         if(str.empty())
 5             return 0;
 6         int sign = 1;
 7         int i =0;
 8         int result = 0;
 9 
10         if (str[0] == '-'){
11             sign = -1;
12             ++i;
13         } 
14         else if(str[0] == '+')
15             ++i;
16 
17         for (; i < str.size(); ++i) {
18             if(str[i]>'9' || str[i] < '0')
19                 return 0;
20             int num = str[i] - '0';
21             
22             // 判断是否上溢出或者下溢出
23             if ((sign==1 && num > (numeric_limits<int>::max()-sign * num)/10)
24                 || (sign==-1 && num< (numeric_limits<int>::min()-sign * num)/10))
25             {
26                 return 0;
27             }
28             result = result *10 + sign * num;
29         }
30         return result;
31     }
32 };
View Code

参考资料

https://blog.csdn.net/u012477435/article/details/83351659#_873

posted @ 2019-08-28 17:56  wxwreal  阅读(178)  评论(0编辑  收藏  举报