题目:给定一个字符串,要求转成整数,不允许使用atoi或者其它类似库函数。
方案:实现这个函数并不难,但是要考虑以下几个问题
1.考虑字符串为空指针的时候
2.考虑字符串为空串
3.考虑是否有+/-符号
4.考虑是否有不合法的字符
5.考虑结果是否会溢出
const int MAXN = 2147483647;
const int MIN = -2147483648;
bool isOk;
//atoi函数,不合法情况isOk为false,返回0
int StrToInt(char *string){
if(string == NULL){ //空指针
isOk = false;
return 0;
}
isOk = true;
int len = strlen(string);
//空串
if(len == 0){
isOk = false;
return 0;
}
//
long long sum = 0;
bool flag = false;
//判断+和-符号
if(string[0] == '+' || string[0] == '-'){
flag = true;
}
//求值
for(int i = 0; i < len; i++){
if(i == 0 && flag){ //如果是+和-符号
continue;
}
if(string[i] >= '0' && string[i] <= '9'){
sum = sum*10 + string[i]-'0';
}
else{
isOk = false;
return 0;
}
if(sum > MAXN || sum < MIN){ //值溢出的情况
isOk = false;
return 0;
}
}
//有符号的时候处理
if(flag){
if(len == 1){
isOk = false;
return 0;
}
if(string[0] == '-'){
sum *= -1;
}
}
return (int)sum; //long long转int
}