码迷,mamicode.com
首页 > 其他好文 > 详细

OJ_3_把字符串转换为数字

时间:2020-02-26 01:18:59      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:直接   默认   没有   code   难点   nbsp   返回   lag   for   

题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

输入一个字符串,包括数字字母符号,可以为空
如果是合法的数值表达则返回该数字,否则返回0

 

溢出判断是难点;

符号的判断;

空字符串;

//+-只能出现在开头,如果没有+-,默认为正数;
//此外如果有非数字,则直接返回0;

 1 class Solution {
 2 public:
 3     int StrToInt(string str) {
 4         int flag = 1;
 5         int res = 0;
 6         int temp;
 7         if(str.length()==0)   //空字符串
 8             return 0;
 9         if(str[0]==-)
10             flag = -1;
11         for(int i = 0; i<str.length(); i++)
12         {
13             if(str[i]<0 || str[i]>9){ //非数字
14                 if(i==0 && (str[i]==+ || str[i]==-)){  //只允许i=0出现+或者-
15                     continue;
16                 }
17                 else{
18                     return 0;
19                 }
20             }
21             else{
22                 //int 十进制:-2^31=-21 4748 3648 到 2^31-1=21 4748 3647。共10位,21亿。
23                 int digit = (int)(str[i]-0);
24                 temp = res*10 + digit;
25                 //注意还要判断res*10是否溢出 ,之后再判断加上digit是否溢出
26                 //向上溢出判断 INT32_MAX < res*10 + digit
27                 if(flag == 1 && (res>INT32_MAX/10 || res*10 > INT32_MAX-digit))  
28                     return 0;
29                 //向下溢出判断 INT32_MIN > res*10*(-1) - digit
30                 if(flag == -1 && (res*flag<INT32_MIN/10 || res*10*flag < INT32_MIN+digit))  
31                     return 0;
32                 res = temp;
33             }
34 
35         }
36         return flag*res;
37     }
38 };

 

OJ_3_把字符串转换为数字

标签:直接   默认   没有   code   难点   nbsp   返回   lag   for   

原文地址:https://www.cnblogs.com/grooovvve/p/12364712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!