LeetCode 第8题:String to Integer


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;
}	


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值