[LeetCode]String to Integer (atoi)

题意:字符串转正数

原题来自:https://leetcode.com/problems/string-to-integer-atoi/

分析:

《程序员面试宝典》上出现的面试题,主要是考虑到细节。

1. 字串为空或者全是空格,返回0; 

2. 字串的前缀空格需要忽略掉;

3. 忽略掉前缀空格后,遇到的第一个字符,如果是‘+’或‘-’号,继续往后读;如果是数字,则开始处理数字;如果不是前面的2种,返回0;

4. 处理数字的过程中,如果之后的字符非数字,就停止转换,返回当前值;

5. 在上述处理过程中,如果转换出的值超出了int型的范围,就返回int的最大值或最小值。

 1 class Solution {
 2 
 3 public:
 4 
 5     int myAtoi(string str) {
 6         long long cur=0;//
 7     int num=0,i=0;
 8     int flag1=0,flag2=0;
 9     while(str[i]!='' && str[i]==' ') i++;//开头空格舍弃
10     if(str[i]=='-') flag1++,i++;
11     else if(str[i]=='+') flag2++,i++;
12     for(; str[i]!=''; i++)
13     {
14         if(str[i]>='0' && str[i]<='9')
15         {
16             if(flag1==2)
17             {
18                 cur=cur*10-(str[i]-'0');//这里是减法,因为cur符号是负号了
19                 if(cur<-2147483648) return -2147483648;
20             }
21             else if(flag1==1) cur=-str[i]+'0',flag1++;//将负数的符号记录到cur里
22             else
23             {
24                 cur=cur*10+(str[i]-'0');
25                 if(cur>2147483647) return 2147483647;
26             }
27         }
28         else break;
29     }
30     num=(int)cur;
31     return num;
32     }
33 };
作者:orange1438
出处:http://www.cnblogs.com/orange1438/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/orange1438/p/4584357.html