【C语言】重要函数atoi的使用

news/2024/11/19 7:27:29/

目录

         一、atoi函数的介绍

         二、atoi函数的使用

         三、atoi函数的模拟实现


一、atoi函数的介绍

一个专门将字符串转换为整数的库函数,具体用法如下:

字符串str,将其内容转化为整数,该整数作为int值返回。

二、atoi函数的使用

atoi函数的使用是非常简单的,如下:

int main()
{int ret = atoi("   -123");printf("%d\n", ret);return 0;
}

运行如下:

 

三、atoi函数的模拟实现

重要板块:模拟实现需要我们将所有可能出现的情况列举出来,才能够完美的模拟实现出atoi库函数,情况如下:

字符串合法性
“”非法
“NULL”非法
“    123”合法
“123abc”非法
“-123”合法
“11111111111111111”非法

1、字符串可以在构成整数的字符之后包含其他字符,这些字符将被忽略,并且对该函数的行为没有影响。

例如:123abc转换成123,字符被忽略,这种情况属于异常情况。

 2、该函数可以跳过多余的空白字符,直到找到第一个非空白字符。然后,从这个字符开始,取一个可选的初始加号或减号,后面跟着尽可能多的数字,并将它们转化为整数值。

例如:-123转换成-123。这种情况属于合法情况。

3、如果字符串的第一个非空白字符序列不是有效的整数,或者是字符串为空或只包含空白字符,则不执行转换。这种情况属于非法转换。

4、最后一种的转化情况之所以是非法转换,是因为整数值的大小是有限制的,太大的话,会出现越界,所以返回值有可能为随机值。

模拟实现atoi库函数的代码如下:

#include <limits.h>
#include <ctype.h>
//设置两种状态,分别代表字符转换的合法性
enum Status
{VALID,//合法INVALID//异常
};
enum Status status = INVALID;
int my_atoi(const char* str)
{if (str == NULL){return 0;}if (*str == '\0'){return 0;}//处理空白字符while (isspace(*str))//如果前面有空格,跳过空格往后寻找符号或数字{str++;}int flag = 0;if (*str == '+'){flag = 1;str++;}else if (*str == '-'){flag = -1;str++;}//处理数字字符//-123long long ret = 0;while (isdigit(*str)){ret = ret * 10 + flag*(*str - '0');if (ret<INT_MIN || ret > INT_MAX)//需要判断数字是否越界{return 0;}str++;}if (*str == '\0'){status = VALID;return (int)ret;}else{return (int)ret;}
}
int main()
{int ret = my_atoi("     -123");if(status == VALID)printf("合法的转换:%d\n", ret);elseprintf("非法的转换:%d\n", ret);return 0;
}


本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

  老铁们,记着点赞加关注哦!!!  


http://www.ppmy.cn/news/5588.html

相关文章

【C++】拷贝构造函数

目录 默认拷贝构造函数 拷贝构造函数的原型&#xff1a; 为什么不用值传递&#xff1f; 为什么不用指针传递&#xff1f; 调用拷贝构造函数的3种情况 (旧对象去构造新对象) 我们熟悉的类型有以下操作&#xff1a; 1.声明&#xff1a;int a; 2.声明并初始化&#xff1a;in…

必须要学习的源码--ConcurrentHashMap

并发安全的集合&#xff1f; 并发不安全的集合 在 Java 中&#xff0c;有一些集合是不安全的&#xff0c;因为它们不是线程安全的。这意味着如果多个线程同时访问这些集合&#xff0c;那么它们可能会出现不可预料的行为。 Java 中的并发不安全的集合包括&#xff1a; ArrayLi…

【深度思考】如何优雅的校验参数?

在日常的开发工作中&#xff0c;为了保证落库数据的完整性&#xff0c;参数校验绝对是必不可少的一部分&#xff0c;本篇文章就来讲解下在项目中该如何优雅的校验参数。 假设有一个新增学员的接口&#xff0c;一般第一步我们都会先校验学员信息是否正确&#xff0c;然后才会落…

剑指 Offer 04. 二维数组中的查找

剑指 Offer 04. 二维数组中的查找 一、题目 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中…

LeetCode算法之--二叉树系列

点赞收藏&#xff0c;以防遗忘 本文【程序大视界】已收录&#xff0c;关注免费领取互联网大厂学习资料&#xff0c;添加博主好友进群学习交流&#xff0c;欢迎留言和评论&#xff0c;一起交流共同进步。 【一】前言 二叉树也是面试算法的常见题型&#xff0c;通常程序会自定义…

【数据结构与算法】试卷 1(含答案)

一、选择题 1. 计算机算法指的是&#xff08;&#xff09; A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 2. 表达式 a*(bc)-d 的后缀表达式是&#xff08;&#xff09; A. abcd- B. abc*d- C. abc*d- D. -*abcd 3. 一个栈的入栈序列是a,b,c,d,e&#xff0c;…

卓海科技冲刺创业板:拟募资5.47亿 相宇阳控制52.9%股权

雷递网 雷建平 12月20日无锡卓海科技股份有限公司&#xff08;简称&#xff1a;“卓海科技”&#xff09;日前递交招股书&#xff0c;准备在深交所创业板上市。卓海科技计划募资5.47亿元&#xff0c;其中&#xff0c;1.04亿元用于半导体前道量检测设备扩产项目&#xff0c;1.84…

MyBatis学习 | 全局配置文件

文章目录一、简介二、各个标签2.1 properties&#xff08;属性&#xff09;2.2 settings&#xff08;设置&#xff09;2.3 typeAliases&#xff08;类型命名&#xff09;2.4 typeHandlers&#xff08;类型处理器&#xff09;2.5 plugins&#xff08;插件&#xff09;2.6 enviro…