[leedcode 08]String to Integer (atoi)

public class Solution {
    public int myAtoi(String str) {
        //此题需要注意的细节很多
        //1.对于“ -123”,“  +3231”,需要考虑去除最前的空格,主要利用循环
        //2.对于越界情况需要判断(此题返回的是32位最大正数或32位最小负数),声明返回值时,需要声明为long
        //3.要考虑“+”和无符号的处理
        //4.字符和数值的转换需要牢记s.charAt(i)-'0'
        //5.遇到非数值时,返回前面的数值
        
        if(str==null||str.length()==0)return 0;
        int i=0;
        int flag=0;
        long res=0;
        while(str.charAt(i)==' ')
              i++;
        if(str.charAt(i)=='-'){
            flag=1;
            i++;
        }else if(str.charAt(i)=='+'){
            i++;
        }
            
        while(i<str.length()){
            //if(str.charAt(i)==' ')i++;
            
                if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
                    res=res*10+str.charAt(i)-'0';
                   if(flag==0&&res>0x7fffffff)return 0x7fffffff;
                   if(flag==1&&-res<0x80000000)return 0x80000000;
                }else break;
               
            i++;
            
        }
        if(flag==1) res=-res;
        return (int)res;
    }
}

 

posted @ 2015-07-05 22:56  ~每天进步一点点~  阅读(154)  评论(0编辑  收藏  举报