1. 问题描述
实现c++函数库中atoi()函数,要考虑到各种特殊情况:
2. 解决方案
转换过程并不复杂,复杂的是要考虑到众多特殊情况。
int myAtoi(string str) {
if(str.length() == 0) return 0; //空串
bool isNeg = false;
long re = 0;
int i=0,cnt;
for(;i
= '0' && str[i] <= '9') re = str[i] - '0',cnt=1; //记录数字的位数 else return 0; i++; for(; i < str.length(); i++) { if (cnt > 10) break; //大于整数所表示的最大位数,跳出循环 if(str[i] < '0' || str[i] > '9') break; re = re*10 + (str[i] - '0'),cnt++; } //溢出判断 if(re > INT_MAX && !isNeg) return INT_MAX; else if(isNeg &&re*(-1) < INT_MIN) return INT_MIN; return isNeg?re*(-1):re; }
?