字串轉整數(atoi) 十進位制實現
阿新 • • 發佈:2019-01-08
題目出處
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; }