剑指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

转载于:https://www.cnblogs.com/wxwhnu/p/11425530.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值