int myAtoi(char* str)
{
LONG64 num = 0;
int flag = 0;
char *p = &str[0];
while (*p == ' ')
{
p++;
}
if (*p == '-' || *p == '+')
{
if (*p == '-')
flag = -1;
else
flag = 1;
p++;//指向下一个字符 为底下的判断做准备
}
while (*p >= '0'&&*p <= '9')
{
num = num * 10 + *p - '0';//
p++;
if (num>INT_MAX&&flag==1)//如果超出最大值 就会使得符号位被进1,变成负数 解决>2^31-1的问题,存为2^31-1=2147483647
{
num = 2147483647;
break;//如果满足条件就要退出循环 ,没有必要继续,因为int s已经存不下
}
if (num > INT_MAX&&flag == -1)
{
num = 2147483648;
break;
}
}
if (flag == -1)
num = -1 * num;
return num;
}
以上是我处理的主要代码,这个题目首先要明确要解决的问题有什么,然后再一一解决;问题有:
1:输入若为' '时,该如何输出,
2:输入为' 010'时应该如何处理;
3:输入数字字符串前有'+'或'-';如何输出;
4:输入超出了int的最大最小值如何输出;
5:(最基本的问题)如何将字符转成数字(最简单*p-'0';即可)
以下是我调试时候的主函数
int main()
{
char str[] = "-2147483649";//输出为 -2147483648
//int a = atoi(str);
int num = myAtoi(str);
printf("%d\n", num);
return 0;
}