【C语言进阶】atoi函数的模拟实现【C的深度解剖】超详细的解释和注释

那么这里博主先安利一下一些干货满满的专栏啦!

作者: #西城s
这是我的主页:#西城s
在食用这篇博客之前,博主在这里介绍一下其它高质量的编程学习栏目:
数据结构专栏:数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏Leetcode想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!

今天,博主带着大家,一步一步,详细地解剖atoi(字符串转整型)这个函数。

本篇为不收藏必后悔系列篇~

atoi()函数原型以及功能介绍

函数原型:int atoi (const char * str);
函数功能: 将一个字符串转化成一个整型。

使用举例:
所需包含头文件:#include<stdlib.h>

实现思路

看到这里,很多伙伴都会觉得这个函数的实现十分简单:提取每一位,字符转整型就可以了,其实不然。因为我们传进去的字符串是很多样的,我们有非常多的情况需要考虑。

需要考虑的问题:

  • 空指针问题
  • 空字符串问题
  • 非数字字符
  • 空白字符,逗号字符等
  • 正负号

这里其实知识一部分,其实,我们通过www.cplusplus.com搜索这个函数,也就是上面那张原型图我们可知,还有许多问题要处理,博主今天就带着大家处理以上五个问题。细节方面我们看代码注释就可以了,已经十分详细了,如果还有不明白的地方,可以私信博主噢。

实现代码

//模拟实现atoi
//将字符串转化成整型
#if 1
#include<assert.h>
enum Status {
VALID,INVALID
}status=INVALID;//先一开始设置成非法
int my_atoi(const char* str) {
//空指针
assert(str);
int flag = 1;//表示是正数
//空字符串
if (*str == '\0') {
//发现这样返回无论怎样都不合适,所以我们设置一个变量
//判断当前返回值是否有效,合法还是非法
//使用枚举
return 0;
}
//处理空白字符
while (isspace(*str)) {
//如果是空白字符,就跳过去了
str++;
}
//正负号
if (*str == '-') {
flag = -flag;//有一个'-'变一次号
str++;
}
//遍历串
long long n = 0;
while (*str) {
if (isdigit(*str)) {
n = n * 10 + (flag) * (*str - '0');
if (n<INT_MIN || n>INT_MAX) {//说明越界了
//但是,如果存到n里面去,是肯定不会越界的,因为会发生截断
//所以,设置成long long是最好的
n = 0;
break;
}
}
else {
n = 0;
break;
}
str++;
}
if (*str == '\0') {
status = VALID;
}
return (int)n;
}
//1.空指针问题
//2.空字符串问题
//3.非数字字符
//4.空白字符等,逗号字符
//5.正负号
int main() {
while (1) {//重复测试
char arr[100] = { 0 };
gets(arr);
int ret = my_atoi(arr);
if (status == VALID)
printf("%d\n", ret);
else
printf("%d err\n", ret);
}
return 0;
}
#endif

尾声

相信看到这里,大家已经对atoi()函数的模拟实现已经有了一定了解了,如果你感觉这篇博客对你有帮助的话,不要忘了一键三连支持一下再离开噢!

【C语言进阶】atoi函数的模拟实现【C的深度解剖】超详细的解释和注释的更多相关文章

  1. 【C语言】模拟实现atoi函数

    atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( ...

  2. 【c语言】 模拟实现库函数的atoi函数

    // 模拟实现库函数的atoi函数 #include <stdio.h> #include <string.h> #include <assert.h> #incl ...

  3. c语言实现atoi和itoa函数。

    首先看atoi函数: C语言库函数名: atoi 功 能: 把字符串转换成整型数. 名字来源:ASCII to integer 的缩写. 原型: int atoi(const char *nptr); ...

  4. C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

    tfref 前言 C++对象的内存布局 只有数据成员的对象 没有虚函数的对象 拥有仅一个虚函数的对象 拥有多个虚函数的对象 单继承且本身不存在虚函数的继承类的内存布局 本身不存在虚函数(不严谨)但存在 ...

  5. C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...

  6. C语言itoa()函数和atoi()函数详解(整数转字符)

    http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整 ...

  7. C语言itoa函数和atoi 函数

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子: # include <stdio.h>  ...

  8. [置顶] C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); [函数说明]ato ...

  9. 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    本文转自: C语言itoa()函数和atoi()函数详解(整数转字符C实现) 介绍 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. int/float to ...

  10. C语言itoa()函数和atoi()函数详解(整数转字符C实现)【转载】

    文章转载自https://www.cnblogs.com/bluestorm/p/3168719.html   C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. ...

随机推荐

  1. 离散化/线段树 (POJ - 2528 Mayor's posters)

    Mayor's posters https://vjudge.net/problem/POJ-2528#author=szdytom 线段树 + 离散化 讲解:https://blog.csdn.ne ...

  2. RabbitMQ的ack机制

    1.什么是消息确认ACK. 答:如果在处理消息的过程中,消费者的服务器在处理消息的时候出现异常,那么可能这条正在处理的消息就没有完成消息消费,数据就会丢失.为了确保数据不会丢失,RabbitMQ支持消 ...

  3. 六、docker数据卷

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...

  4. 【转载】内存基本概念-watermark&lowmem_reserve

    概述 当系统内存短缺的情况下仍去申请内存,可能会触发系统对内存的回收,那什么时候应该进行回收,回收到什么标准又可以停止回收,参考依据是什么?即本文将介绍的watermark(内存水位线),当检查wat ...

  5. eyebeam高级设置

    概述 VOIP测试过程中,经常会用到各种各样的SIP终端,eyebeam是其中最常见的一种. 在eyebeam的配置option中,只有少量的配置选项,有些特殊的设置无法配置. 比如DTMF码的发码形 ...

  6. OpenShift image registry 访问镜像

    1. OpenShift 内部 image registry Openshift 自带内部 image registry,可通过 podman 实现 image 的 pull 和 push 操作. 对 ...

  7. 万字血书Vue—走近Vue

    Vue是什么? Vue是一套用于构建用户界面的渐进式JavaScript框架 构建用户界面:用vue往html页面中填充数据 渐进式:Vue可以自底向上逐层的应用,从轻量小巧核心库的简单应用,到引入各 ...

  8. JavaScript 对象和 JSON 的区别

    参考原文:https://blog.csdn.net/jiaojiao772992/article/details/77871785/ 2.1 对象和 JSON 的区别 JSON 就是 JavaScr ...

  9. Go-命令行参数解析

    1. 解析命令行参数 程序在执行时,获取在命令行启动程序是使用的参数 命令行( Command line interface -- CLI):基于文本来查看.处理.操作计算机的界面,又被称为 终端.控 ...

  10. 【面试题精讲】JVM中有哪些垃圾收集器

    有时博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top 首发博客地址 系列文章地址 在Java虚拟机(JVM)中,有以下几种常见的垃圾收 ...