題目出處
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;
}