String to Integer (atoi)

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

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 }
原文地址:https://www.cnblogs.com/daocaorenblog/p/4977832.html