atoi函数就是由string转为int,在这个过程中需要做一些判断。
1. 判断string长度>0
2. 判断首位字符的符号
3. 正负数对应的溢出条件
4. 判断每一位的字符
参考了JDK1.8的实现。
int my_strlen(const char*s){
if(s== nullptr){
cout<<"error"<<endl;
}
int i;
for(i=0;s[i]!='\0';i++);
return i;
}
//reference JDK1.8
int my_atoi(const char* s) {
if(s== nullptr){
throw "输入异常";
}
bool negative= false;
int result = 0;//存放中间变量
int len= my_strlen(s);
int limit=-2147483647;
int i=0;
if(len>0) {
if (s[0] < '0') {
if ('-' == s[0]) {
negative = true;
limit=-2147483648;
} else if ('+' != s[0]) {
throw "输入异常";
}
if(len==1){
throw "error";
}
i++;
}
while(i<len){
int digit=s[i++]-'0';
if(digit<0||digit>9){
throw "输入异常";
}else{
result*=10;
if(result-digit<limit){
throw "溢出";
}
result-=digit;
}
}
}else{
cout<<"error"<<endl;
throw -2147483647;
}
return negative?result:-result;
}