模拟实现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;
}

文章来源地址https://uudwc.com/A/6zad3

原文地址:https://blog.csdn.net/m0_62014223/article/details/133210027

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月24日 01:17
下一篇 2023年09月24日 01:18