模拟实现atoi函数,将字符型转换成整型输出

问题:

1.单引号双引号混淆

2.没有设定n值,判断的范围是*c的范围

3.根本想不出n的表达式,括号范围也没给对

4.c++写成n++

5.没有强转

#include<ctype.h>
#include<limits.h>
//#include<stdlib.h>
enum State
{
	INVALUE, //0
	VALUE    //1
};
State = INVALUE;//默认均为非法转换
int my_atoi(const char* c)
{
	int flag = 1;//判断正负号的转换标志
	// 1.NULL
	if (NULL == c)
	{
		return 0;
	}
	// 2.空白字符
	while (isspace(*c))
	{
		c++;
	}
	// 3."+/-"符号存在
	if (*c == '+')
	{
		flag = 1;
		c++;//往后移动
	}
	else if (*c == '-')//单引号才行,否则进不去循环
	{
		flag = -1;
		c++;
	}
	// 4.纯数字的字符转换
	long long n = 0;//以防初始值太小
	while (isdigit(*c))
	{
		n = n * 10 + (*c - '0') * flag;
		//(n * 10 + *c - '0') * flag会报错,由于括号的存在,会先计算n * 10 + *c,然后再减去'0'
		if (n <= INT_MIN || n >=INT_MAX)
		{
			return 0;
		}
		c++;
	}
	if (*c == '\0')
	{
		State = VALUE;
		return (int)n;
	}
	if (isalnum(*c))
	{
		State = INVALUE;
		return (int)n;
	}
}
int main()
{
	const char* c = "   +1234";//const在*左边:不改动内容
	int ret = my_atoi(c);
	if (ret == 0)
	{
		printf("非法转换:%d\n", ret);
	}
	else
	{
		printf("合法转换:%d\n", ret);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值