将一个字符串转换为整数。面对这样一个问题,相信很多人能在短时间内写出如下不到10行的代码:
int StrToInt(char *string)
{
int num = 0;
while(*string != 0)
{
num = num*10+*string - '0';
++string;
}
return num;
}
上面的代码虽然能够解决吧字符串转换为整数这个最基本的要求,但是在处理这个问题的时候我们还要想到输入的字符串中有非数字字符和正负号的可能,还要考虑最大的正整数和最小的负整数以及溢出。此外,还应该考虑当输入的字符串无法转换为整数的时候该如何做错误处理。
int MyStrToInt(string str){
bool negative = false; //适用于没出现正负号默认为正数的情况;
int ind = 0; //索引;
long long result = 0;//初始化
while (ind < str.size() && str[ind] == ' ')
{//指向第一个非空格字符;
ind++;
}
if (ind == str.size())
{ //字符串全部为空字符
return 0;
}
//正负号判定;
if (str[ind] == '-')
{
negative = true;
ind++;
}
else if (str[ind] == '+'){
negative = false;
ind++;
}
//没有到字符串尾且仍然是数字;
while (ind < str.size() && isdigit(str[ind]))
{
result = result * 10 + str[ind++] - '0';
//int溢出判定;
if (result >= 2147483648){
if (negative) return INT_MIN;
else return INT_MAX;
}
}
//根据flag negative决定返回的是整数还是负数;
return negative ? result * (-1) : result;
}