【c语言】atoi的模拟实现

这篇具有很好参考价值的文章主要介绍了【c语言】atoi的模拟实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.头文件

atoi() 是 C语言的一个标准库函数,定义在<stdlib.h>头文件中

2.atoi的解析

具体来讲,atoi() 函数首先会丢弃尽可能多的空白字符,直至找到第一个非空白字符,然后从该字符开始,识别 “+”、“-” 以及 0-9 之间的十进制数,最后将它们转换成整数。如果构成整数的后面还有其它字符,这些字符将会被忽略。

3.函数申明

【c语言】atoi的模拟实现,c语言,c语言
参数
string:指向要转换的字符串。
如果由于 str 为空或者 str 字符串无法转换为整数,函数返回 0。

如果字符串表示的值超出了 int 类型所能表示的整数范围,函数返回的数值是int 最大值或最小值。

4.一些转化的例子

1.如果前面有+,转化后+号去掉【c语言】atoi的模拟实现,c语言,c语言


2.如果是-号,则保留
【c语言】atoi的模拟实现,c语言,c语言


3.传入的是空指针
【c语言】atoi的模拟实现,c语言,c语言

【c语言】atoi的模拟实现,c语言,c语言


  1. 有空格的话跳过
    【c语言】atoi的模拟实现,c语言,c语言

5.空字符串的转化【c语言】atoi的模拟实现,c语言,c语言


6.大于int类型最大值,转化为int类型的最大值
【c语言】atoi的模拟实现,c语言,c语言


7.小于int类型最小值,转化为int类型的最小值
【c语言】atoi的模拟实现,c语言,c语言


8.出现整数后面有其他字符截断.【c语言】atoi的模拟实现,c语言,c语言


9.先出现其他字符比如a
【c语言】atoi的模拟实现,c语言,c语言

5.函数实现

1.基本框架

enum State//枚举类型定义转化是否正常
{
	INVALID,//不正常
	VALID,//正常



}sta= INVALID;//先让其正常
int my_atoi(const char *str)//atoi的具体实现
{





}
int main()
{
	char arr[] = "1234";
	int ret = my_atoi(arr);//返回转化后的值
	if (sta == INVALID)//不正常转化
	{
		printf("非正常转化-%d",ret);


	}
	if (sta == VALID)//正常转化
	{printf("正常转化-%d", ret);
	}







}

2.处理空指针

int my_atoi(const char *str)//atoi的具体实现
{assert(*str);//处理空指针
}

3.处理空字符串

int my_atoi(const char *str)
{
	assert(*str);
	if (*str == '\0')//处理空字符串
	{                //处理空字符串
		return 0;    //处理空字符串


	}





}

4.处理空格

int my_atoi(const char *str)
{
	assert(*str);
	if (*str == '\0')
	{
		return 0;


	}
	while (isspace(*str))//处理空格
	{                    //处理空格
		str++;            //处理空格
	}





}

5.处理符号位

int my_atoi(const char *str)
{
	assert(*str);
	if (*str == '\0')
	{
		return 0;


	}
	while (isspace(*str))
	{
		str++;
	}
	int flag = 1;//符号位,如果为1则为正数,如果为-1则为负数,如果没加正号,默认为1;
	if (*str=='+')
	{
		flag = 1;
		str++;//跳过当前字符


	}
	else if (*str == '-')
	{
		flag = -1;
		str++;//跳过当前字符
    }





}

6.处理数字字符文章来源地址https://www.toymoban.com/news/detail-721009.html

int my_atoi(const char *str)
{
	assert(*str);
	if (*str == '\0')
	{
		return 0;


	}
	while (isspace(*str))
	{
		str++;
	}
	int flag = 1;
	if (*str=='+')
	{
		flag = 1;
		str++;



	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
    }
long long r=0;//如果r 为int类型的话,超出范围,可能要截断,这里初始话为0,保证了空字符串返回0
	while (*str != '\0')//字符还未到末尾
	{
		if (isdigit(*str))//判断是否是字符
		{
			r = r * 10 + flag**str - '0';//得到字符对应的整数
			if (r > INT_MAX || r < INT_MIN)//如果超出范围
			{
				if (flag == 1)
				{
					return INT_MAX;//超出int 最大值,就返回最大值

				}
				if (flag == -1)
				{

					return INT_MIN;//超出int 最小值,就返回最小值

				}
			
			
			}
			str++;//指针移动下一个字符





		}
		else
		{
			return r;//如果str指向的不是字符的话,就返回r的值,比如1234a,此时r=1234
		}







	}





}

6.整体代码

#include<stdio.h>
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include<stdlib.h>
enum State
{
	VALID,
	INVALID


}sta= INVALID;
int my_atoi(const char* str)
{
	assert(*str);
	if (*str == '\0')
	{

		return 0;


	}
	while (isspace(*str))
	{
		str++;
	}
	int flag = 1;
	if (*str == '+')
	{
		flag = 1;
		str++;


	}
	else if (*str == '-')
	{
		flag = -1;
		str++;
    }
	long long r = 0;
	while (*str != '\0')
	{
		if (isdigit(*str))
		{
			r = r*10+(*str-'0')*flag;
			if (r > INT_MAX || r < INT_MIN)
			{
				if (flag == 1)
				{
					return INT_MAX;


				}
				else if (flag == -1)
				{
					return INT_MIN;
				}

				

			}

			str++;

		}
		else
		{
			return r;
		}
		




	}
	
		sta = VALID;
     
	return (int)r;






}



int main()
{
	char arr[] = "a111";
    int ret=my_atoi(arr);
	if (sta == VALID)
	{
		printf("正常输出%d",ret);



	}
	if (sta == INVALID)
	{
		printf("非正常输出%d",ret);

	}





}

到了这里,关于【c语言】atoi的模拟实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

领支付宝红包 赞助服务器费用

相关文章

  • C语言 实现atoi函数

    函数int atoi(char *str);  使用ubuntu进行多文件编译(main.c  head.h   test.c) head.h(预处理) main.c(主函数) test.c(自定义函数)

    2024年02月10日
    浏览(38)
  • 模拟实现atoi函数(将数字字符串转换为整型)附加leetcode练习题

    各位朋友们,大家好啊!今天我为大家分享的知识是如何模拟实现atoi函数。相信大家如果能够理解这个知识,对大家以后的刷题是有帮助的。 我们要想实现某个函数,我们肯定要先知道这个函数的作用是什么,然后我们再根据它的作用来自己实现。我们先来看看stoi函数在库

    2023年04月19日
    浏览(57)
  • C语言-atoi函数的使用和实现

    atoi是C语言中常见的函数。大家可能对于他不太熟悉,其主要还是因为学校可能没有讲到。其实有很多函数像atol、atof都是一样的,本篇文章以atoi为例,剩余大家如果感兴趣可以再去了解。 目录 1.函数介绍 2.代码演示 3.atoi函数的模拟实现 4.扩展 功能: 1.解析字符串的内容,

    2024年04月25日
    浏览(36)
  • 【LeetCode】字符串转换整数 (atoi) [M](模拟)

    8. 字符串转换整数 (atoi) - 力扣(LeetCode) 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负

    2024年02月07日
    浏览(68)
  • 【C语言】C语言 atoi 函数解析

      🧑‍🎓 个人主页:简 料   🏆 所属专栏: C语言   🏆 个人社区:越努力越幸运社区   🏆 简       介: 简料简料,简单有料~在校大学生一枚,专注C/C++/GO的干货分享,立志成为您的好帮手 ~ C/C++学习路线 (点击解锁)(●’◡’●) ❤️ C语言 ❤️ 初阶数据结构与算法

    2024年02月07日
    浏览(56)
  • C语言——atoi函数解析

    目录 前言 atoi函数的介绍 atoi函数的使用 atoi函数的模拟实现 前言 对于 atoi 函数大家可能会有些陌生,不过当你选择并阅读到这里时,请往下阅读,我相信你能对 atoi 函数熟悉 该函数的头文件为 stdlib.h  或  cstdlib atoi函数的介绍 此函数的功能是将数字字符的字符串转化为字

    2024年01月19日
    浏览(37)
  • C语言atoi函数详解

    atoi是C/C++语言中一个常用的字符串转整数的函数,其原型定义在stdlib.h头文件中。它的作用是将一个字符串表示的数字转换为对应的整数。 函数原型: int atoi(const char* str);   参数: str:要转换的字符串。 返回值: 如果成功,则返回相应的整数值; 如果发生错误,则返回0。

    2024年02月02日
    浏览(39)
  • 【C语言】重要函数atoi的使用

    一个专门 将字符串转换为整数 的库函数,具体用法如下: 字符串str,将其内容转化为整数,该整数作为int值返回。 atoi函数的使用是非常简单的,如下: 运行如下:   重要板块:模拟实现需要我们将所有可能出现的情况列举出来,才能够完美的模拟实现出atoi库函数,情况

    2023年04月08日
    浏览(30)
  • c语言模拟实现strstr函数

    strstr()是string.h库里的一个函数,它的效果是传两个字符串地址,在第一个字符串中找第二个字符串。如果存在返回存在第一个字符串中关于第二个字符串的首地址。如果不存在,就返回空指针。 首先需要定义三个指针,s1,s2,p。因为两个字符串不能改变,需要重新定义三个指

    2024年02月07日
    浏览(52)
  • C语言—模拟实现memcpy,memmove

    函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 这个函数在遇到 \\\'\\0\\\' 的时候并不会停下来。 如果source和destination有任何的重叠,复制的结果都是未定义的。 其实要实现memcpy非常的简单,我们不管传进来的是哪种数据类型都统一强转为char*,我们知

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包