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

我的string_to_inreger函数

时间:2015-03-31 15:58:53      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

  在做leetcode的时候,又遇到这个百提不爽的问题,当时拿过题来,感觉那些情况我都知道的,然后就开始写。结果,还是很多没有注意到的,提交好几次才accept了,在此记录下,也与大家共享。

  考虑情况:

    1. 首先,传入指针是否为空
    2. 字符串是否为空
    3. 包含+、-符号【但仅包含+、-为非法的】
    4. 是否会溢出(超出int表示范围)
    5. 是否包含非法字符【输出为可转换的还是输出0或者其他要看题意!】          
    6. 忽略最前面的空格

 

 1 #include "stdafx.h"
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 bool isLegal = true;
 7 
 8 class Solution
 9 {
10 public:
11     int atoi(const char *str)
12     {
13         int  sum = 0;//空串返0
14         const char *p = str;
15         bool isNegative = false;//是否为负数
16         //或者设为int sign = 1;为负时设为-1,返回sign*sum
17         if(str == NULL)
18         {
19             isLegal = false;
20             return 0;
21         }
22         //先过滤掉空格!!!
23         while(*p== &&*p!=\0)//!!!
24             p++;
25 
26         if(*p == +)
27         {
28             //仅有“ +”不合法!!!
29             p++;
30             if(*p == \0)
31             {
32                 isLegal = false;
33                 return 0;
34             }
35         }
36         else
37         {
38             if(*p == -)
39             {
40                 //仅有“ -”不合法!!!
41                 isNegative = true;
42                 p++;
43                 if(*p == \0)
44                 {
45                     isLegal = false;
46                     return 0;
47                 }
48             }
49         }
50 
51         while(*p != \0)
52         {
53             if(*p>=0 && *p<=9)
54             {
55                 //    if(!isDecimal)//不是小数!!!
56                 //计算之前判断:不在int表示范围内!!!
57                 if(!isNegative)
58                 {
59                     if(sum>0x7fffffff/10 ||( sum==0x7fffffff/10 && (*p-0) >= 0x7fffffff%10))
60                         return 0x7fffffff;//最大最小值表示法!!!
61                 }
62                 else
63                 {
64                     if(sum>0x80000000/10 ||( sum==0x80000000/10 && (*p-0) >= 0x80000000%10))
65                         return (int)0x80000000;//最大最小值表示法!!!(0x不要漏掉了!!)
66                 }
67 
68                 sum = sum*10+(*p-0);
69 
70                 //    else
71                 //        sum = sum + (*p-‘0‘)*0.1;//计算方式不对!!
72             }
73             else
74             {
75                 break;//!!!返回可转换部分
76                                                                    }
77             p++;
78         }
79 
80 
81         return isNegative ? -sum : sum;
82     }
83 
84 };
85 
86 int main()
87 {
88     Solution sol;
89     cout << sol.atoi("-2147483647")<<endl;
90     //“-123”,“”,NULL,“  213”,超过范围,“+”
91     //不规则输入,但是有效:“-3924x8fc”、“+413”
92     //边界:“-2147483647”“-2147483648”“2147483647”
93     //无效格式:“++c”、“++1”
94     //溢出数据“2147483648”“9223372036854775809”
95 
96 }

 

我的string_to_inreger函数

标签:

原文地址:http://www.cnblogs.com/dreamrun/p/4381135.html

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