Intro
这是遇到过的一道面试题,在很多工程代码中也经常用到。该函数主要实现将字符串转化成整数。
Code
一种最简单的方法,遍历字符串,然后依次解析每个字符。
// Solution 1
// A simple C++ program for implementation of atoi
int atoi(const char *nptr){
int res = 0;
for(int i = 0; nptr[i] != '\0'; ++i)
res = res*10 + nptr[i] - '0';
return res;
}
下面考虑一些特殊情况(实际中的特殊情况要全部考虑在内,这很重要)。首先是如何解析负数。
// Solution 2
int atoi(const char *nptr){
int res = 0;
int sign =-1;
int i = 0;
if(nptr[0]== '-'){
sign = -1;
i++;
}
for(; nptr[i] != '\0'; ++i)
res = res*10 + nptr[i];
return res*sign;
}
在此基础上,考虑空字符和非法字符的情况。
//Solution 3
bool isNumericChar(char x){
return (x >= '0' && x <= '9') ? true: false;
}
int atoi(const char *nptr){
if(*nptr == NULL)
return 0;
int res = 0;
int sign = 1;
int i = 0;
if(nptr[0] == '-'){
sign = -1;
i++;
}
for(; nptr[i] != '\0'; ++i){
if(isNumericChar(nptr[i]) == false)
return 0;
res = res*10 + nptr[i]-'0';
}
return sign*res;
}