题目:8. 字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
解答:
int myAtoi(char* s)
{
long ret = 0;
// 记录正负数
int flag = 1;
// 判断空格
while (*s == ' ')
{
s++;
}
// 判断是否为正数
if (*s == '+')
{
s++;
flag = 1;
}
// else if防止"+-12"这种情况
// 判断是否为负数
else if (*s == '-')
{
s++;
flag = -1;
}
// 开始遍历数字部分
while (*s)
{
// 开始遍历数字部分
if (isdigit(*s))
{
ret = ret * 10 + (*s - '0') * flag;
// 判断是否最大值溢出
if (ret >= INT_MAX )
{
ret = INT_MAX;
break;
}
// 判断是否最小值溢出
if( ret <= INT_MIN )
{
ret = INT_MIN;
break;
}
// 数字范围正常,继续遍历
s++;
}
// 遇到非数字字符,结束遍历
// 返回正常情况
else
return ret;
}
// 返回异常情况
return ret;
}