leetcode 8. String to Integer (atoi)

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

这题很讨厌,要考虑所有的情况,可以拿标准函数atoi做测试,看它输出的是什么结果。



int myAtoi(char* str) {
	if (str == NULL)
		return 0;
	int len = strlen(str);
	int k = 0;
	if (str[0] != ' ' && str[0] != '+' && str[0] != '-' && !(str[0] - '0' >= 0 && str[0] - '9' <= 0))
		return 0;
	while (k<len&&str[k]== ' ' )
		k++;
	if (k == len)
		return 0;
	bool positive = true;
	long long int re = 0;
	if (str[k] == '+' || str[k] == '-')
	{
		if (k == len - 1)
			return 0;
		if (!(str[k + 1] - '0' >= 0 && str[k + 1] - '9' <= 0))
			return 0;
		if (str[k] == '-')
			positive = false;
		k++;
	}
	long long int intmax = 2147483647;
//#define INT_MIN     (-2147483647 - 1)
	//long long int intmin = -2147483648;
	while (k < len&&str[k]-'0'>=0&&str[k]-'9'<=0)
	{
		re = 10 * re + str[k] - '0';
		if (positive&&re > intmax)
		{
			re = intmax;
			break;
		}
		if (!positive&&re > intmax + 1)
		{
			re = intmax + 1;
			break;
		}
		k++;
	}
	
	return positive ? re : -re;
}

accepted


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值