8. String to Integer (atoi) ---Leetcode

Implement atoi to convert a string to an integer.

题目分析:

题目本身很简单就是将一个字符串转化成一个整数,但是由于字符串的千差万别,导致在实现的时候细节非常多。需要注意的有以下一些:
1.字符串可能由一些空格开始,然后遇到一个正号或者负号,然后是正常的数字
” +123” -> 123 ;” -41” -> -41
2.如果在数字后出现了一些其他字符,直接忽视
” +123^&34” -> 123 ; ” -41 123” -> -41
3.如果最前面的字符是无效数字,或者字符串只有空格或者是空的,都直接返回0
” &*^20” -> 0
4.如果正确的数字超出了int,如果是大于INT_MAX (2147483647),就返回2147483647;如果小于INT_MIN (-2147483648) ,就返回INT_MIN (-2147483648)
“2147483648” -> 2147483647

class Solution {
public:
    int myAtoi(string str) {
        long long sum=0;
        int flag=0;//判断是否是第一个非空格字符
        int fuhao=0;//如果等于1,表明是负数
        int mine=-2147483648;//最小int
        int maxe=2147483647;//最大int

        for(int i=0;i<str.size();i++)
        {
            //如果目前为止还没有出现第一个非空格字符
            if(str[i]==32 && flag==0) continue;

            if((str[i]==43) || (str[i]==45)) {//43:+  45:-
                if(flag==0)//这里flag==0为真时表示遇到第一个非空格字符
                {
                    flag=1;
                    if(str[i]==45)fuhao=1;
                    continue;
                }
                else return 0;//非第一个非空格字符位,又出现正负号,就是无效数字
            }

            //如果数字后面又出先了非数字字符,就自动忽略后面的字符,返回已统计的数字
            if(str[i]<48 || str[i]>57) {
                if(fuhao==1) return -sum;
                else return sum;
            }

            sum=sum*10+str[i]-48;//如果该位字符是正常的数字,就将这个数字加入统计
            flag=1;//即使第一个非空格字符不是符号,也要明确已经出现了非空格字符

            if(fuhao==0){
                if(sum>maxe) return maxe;
            }
            else{
                if(-sum<mine) return mine;
            }

        }
        if(fuhao==1) return -sum;
        return sum;

    }
};
posted @ 2016-03-07 23:15  gremount  阅读(196)  评论(0编辑  收藏  举报