[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]!='\0' && str[i]==' ') i++;//开头空格舍弃 10 if(str[i]=='-') flag1++,i++; 11 else if(str[i]=='+') flag2++,i++; 12 for(; str[i]!='\0'; 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/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。