字符串轉整數(atoi) 十進制實現

題目出處

https://leetcode.com/submissions/detail/64717103/


實現

注意幾點,是在實現過程中發現的:

  實現的是10進制轉換

 最前面可以有空格, 如輸入“    2324"

 前面可以有符號“+” “-”, 如輸入: “+123"  或“-987" 等

 輸入中可能有其他字符, 如 "342ab232", 輸出342

 輸入超過int最大值時, 返回int最大值0x7fffffff

 輸入小於int最小值時,返回 0x80000000.



算法實現:

int myAtoi(string str) {
        if(str == "")return 0;
        long ret = 0;
        int sign = 1;
        int index = 0;
        //跳過開頭的空格
        while(isspace(str[index])) index++;
        //計算第一個字母
        if(str[index] >'9' || str[index] <'0'){
            if(str[index] == '-') {sign = -1; index++;}  
            else if(str[index] == '+') {sign = 1;index++;}
            else  return 0;
        }
        // int last = index;
        // while(last < str.length() && str[last] >= '0' && str[last] <= '9'){last++;}
        // if(last-index < 11){
        //   while(index < last){
        //       ret = 10*ret +  (str[index++]-'0');
        //   } 
        // }
        // else{
        //     ret = 0X80000000;
        // }
        while(index < str.length() && str[index] >= '0' && str[index] <= '9'){
            ret = 10*ret +  (str[index++]-'0');
            if(ret >= 0X80000000) break;
        }
        
        if(sign == 1 && ret > 0x7FFFFFFF) return 0x7FFFFFFF;
        if(sign == -1 && ret > 0X80000000) return 0X80000000;
        return sign*ret;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章