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

问题:

1.单引号双引号混淆

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

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

4.c++写成n++

5.没有强转

#include
#include
//#include
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;
}

你可能感兴趣的:(c语言,算法)