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

String to Integer (atoi)

时间:2015-11-19 16:40:35      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

这题写的好惨啊,各种情况

1、丢弃前面空白和数字后面东西

2、数字是会连续输入的或者是和符号一起输出的,中间有其他的字符都会视为无效,数字前有其他字符也会视为无效。

3、0777视为777的,注意整数溢出。

 1 class Solution {
 2 public:
 3     int myAtoi(string str) {
 4        if(str.empty()) return 0;
 5        string::iterator first=str.begin(),end=str.end();
 6        int n=0,op_tag=0,num_tag=0,space_tag=0;
 7        long long max=2147483647,num=0;
 8        char op=+;
 9       while(first!=end)
10       {
11       while(*first== ){first++;space_tag=1;}
12            if(*first==+||*first==- ) 
13             {
14                 if(op_tag==0)
15                 {
16                     op=*first;
17                      op_tag=1;
18                      first++;
19                     
20                 }
21                 else return 0;
22             } 
23             if((first != end) &&isdigit(*first)) 
24                           {
25                             while((first != end) && isdigit(*first))
26                             {
27                              n=*first-0;
28                              num=num*10+n;
29                              first++;
30                              num_tag=1;
31                               if(num > max)break;
32                             }
33                           }
34             else break;
35            if(num_tag==1||space_tag==1||op_tag==1) break;
36              first++; 
37       }
38   if(op==-)
39   {
40     if(num >(max+1))num =-(max+1);
41     else num=-num;
42    }
43   else if(op== +) 
44     {
45        if(num>max) num=max;
46     }
47        return num; 
48        
49     }
50 };
如果把指针改为下标会简练一些,下面是网上的思路
 1 int atoi(const char *str) {
 2     int sign = 1, base = 0, i = 0;
 3     while (str[i] ==  ) { i++; }
 4     if (str[i] == - || str[i] == +) {
 5         sign = 1 - 2 * (str[i++] == -); 
 6     }
 7     while (str[i] >= 0 && str[i] <= 9) {
 8         if (base >  INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - 0 > 7)) {
 9             if (sign == 1) return INT_MAX;
10             else return INT_MIN;
11         }
12         base  = 10 * base + (str[i++] - 0);
13     }
14     return base * sign;
15 }

 

String to Integer (atoi)

标签:

原文地址:http://www.cnblogs.com/daocaorenblog/p/4977832.html

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