atoi函数及模拟实现

✅博客主页:爆打维c-CSDN博客​​​​​​ 🐾

🔹分享c语言知识及代码 

文章目录

一、atoi函数的简要介绍

1.函数原型

二、atoi函数的使用示例

💠正数示例:

💠负数示例:

💠带有符号示例:

💠无效输入示例:

三、模拟实现atoi

1.思路

2.实现代码

总结:


一、atoi函数的简要介绍

1.函数原型

▪️ atoi(ascii to integer)是C语言中的一个库函数,用于将字符串转换为对应的整数。

▪️ 规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。

头文件<stdlib.h>

int atoi (const char * str); 

原文:

译文:


二、atoi函数的使用示例

 当使用atoi函数将字符串转换为整数时,不同情况会导致不同的结果。以下是一些示例和解释:

💠正数示例:

const char *str1 = "12345";
int num1 = atoi(str1);
// 输出: num1 = 12345

在这个示例中,输入的字符串是一个正数,atoi函数将其转换为对应的整数。

💠负数示例:

const char *str2 = "-9876";
int num2 = atoi(str2);
// 输出: num2 = -9876

在这个示例中,输入的字符串是一个负数,atoi函数将其转换为对应的负整数。

💠带有符号示例:

const char *str3 = "+42";
int num3 = atoi(str3);
// 输出: num3 = 42

在这个示例中,输入的字符串带有正号,atoi函数会忽略正号并将其转换为对应的整数。

💠无效输入示例:

const char *str4 = "12abc";
int num4 = atoi(str4);
// 输出: num4 = 12

在这个示例中,输入的字符串以有效的数字开头,但后面包含了非数字字符。atoi函数会在遇到非数字字符时停止转换,返回之前已转换的数字部分。

大家也可以自己敲代码试验atoi函数的使用:


三、模拟实现atoi

1.思路

有了上述对atoi函数比较清晰的了解,再进行模拟实现就不难了,思路如下
🔸首先判断 字符串是否为空或者空指针,若是则返回0。
🔸跳过空格位
🔸判断字符串的字符是否为正号或负号,若是则记录下符号,并将指针后移一位。
🔸遍历字符串的每个字符,若字符为数字,则将其转换为对应的整数,并累加到结果中。若遇到非数字字符,停止遍历。
🔸根据之前记录的符号,若为负号,则将结果取反。

2.实现代码

int My_atoi(const char*s){int sign = 1; //为空或空指针返回 0if (s == NULL || *s == '\0') {return 0;}//跳过空格while(*s == ' ') {s++;}//判断符号位if (*s == '-'||*s=='+') {if (*s == '-') {sign = -1;}s++;}int result = 0;  //计算结果while (*s) {if (*s > '9' || *s < '0') {break;}else {//*s = *s - '0';result = result * 10 +( *s-'0'); //转换为对应的整数,并累加s++; }}return result*sign;
}

总结:

需要注意的是,atoi函数的返回值为int类型。当遇到无效输入或非数字字符时,atoi函数会返回0。这意味着在处理可能包含无效输入的字符串时,应该注意检查返回值来判断转换是否成功。

另外,需要注意atoi函数没有处理整数溢出的能力。如果转换的结果超出了int类型的范围,将导致结果不准确。为了处理溢出情况,可以考虑使用更强大的函数,如strtol函数,它提供了更多的错误处理和转换控制选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言步行梯】C语言实现扫雷游戏(含详细分析)

&#x1f3af;每日努力一点点&#xff0c;技术进步看得见 &#x1f3e0;专栏介绍&#xff1a;【C语言步行梯】专栏用于介绍C语言相关内容&#xff0c;每篇文章将通过图片代码片段网络相关题目的方式编写&#xff0c;欢迎订阅~~ 文章目录 需求分析具体实现主函数体菜单实现游戏实…

Docker 从0安装 nacos集群

前提条件 Docker支持一下的CentOs版本 Centos7(64-bit)&#xff0c;系统内核版本为 3.10 以上Centos6.5(64-bit) 或者更高版本&#xff0c;系统内核版本为 2.6.32-431 或者更高版本 安装步骤 使用 yum 安装&#xff08;CentOS 7下&#xff09; 通过 uname -r 命令查看你当…

MFC界面美化第四篇----自绘list列表(重绘列表)

1.前言 最近发现读者对我的mfc美化的专栏比较感兴趣&#xff0c;因此在这里进行续写&#xff0c;这里我会计划写几个连续的篇章&#xff0c;包括对MFC按钮的美化&#xff0c;菜单栏的美化&#xff0c;标题栏的美化&#xff0c;list列表的美化&#xff0c;直到最后形成一个完整…

Codeforces Round 935 (Div. 3)(A,B,C,D,E,F)

比赛链接 阳间场&#xff0c;阴间题&#xff0c;最考阅读理解的一场。题目本身的难度不大。 A. Setting up Camp 题意&#xff1a; 组委会计划在奥运会结束后带领参赛者进行一次徒步旅行。目前&#xff0c;需要携带的帐篷数量正在计算中。据了解&#xff0c;每个帐篷最多可容…

前端vue3-手动设置滚动条位置/自动定位

从B页面进行xx操作后需要跳转到A页面&#xff0c;并定位到AA职位&#xff0c;上图为A页面。 A页面的左侧是div&#xff0c;内层包裹List组件 给div定义refleftRef,在代码中写如下&#xff1a; function scrollTop() {if (leftRef.value) {console.log(99, leftRef.value);next…

0基础 三个月掌握C语言(13)

数据在内存中的存储 整数在内存中的存储 在讲解操作符时 我们就已经学习了该部分的内容 这里我们回顾一下 整数的二进制表示方法有三种&#xff1a;原码 反码 补码 有符号的整数&#xff08;unsigned&#xff09; 三种表达方式均有符号位和数值位两部分 最高位的一位被当…

文件包含漏洞之包含SESSION(CTF题目)

这次使用的环境是ubuntunginxphpmysql 首先四个文件源码在以下链接中&#xff1a; 一道CTF题&#xff1a;PHP文件包含 | Chybeta 我们注册一个用户名111密码111&#xff0c;然后登录查看cookie和linux的session&#xff0c;因为我们的de服务器 是手动搭建的&#xff0c;所以…

Java IO模型

NIO Java IO 模型1. 什么是IO计算机结构角度应用程序角度 2. 常见的内存模型3. Java中常见的IO模型3.1 BIO&#xff08;Blocking I/O&#xff09;3.2 NIO&#xff08;Non-blocking/New I/O&#xff09;同步非阻塞 IO 模型I/O 多路复用模型 3.3 AIO&#xff08;Asynchronous I/O…

Spring6.1新特性,四种方式调用REST接口(RestClient、WebClient、RestTemplate、HTTP Interface)

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 官网 REST Clients :: Spring Framework The Spring Framework provides the following choices for…

电子元器件批发采购中的供应链透明度与可追溯性

电子元器件批发采购中的供应链透明度与可追溯性是非常重要的&#xff0c;特别是考虑到供应链的复杂性和全球化。以下是一些关于如何增强供应链透明度和可追溯性的建议&#xff1a; 供应商审核与选择&#xff1a;对潜在的供应商进行全面的审核和评估&#xff0c;了解其供应链结构…

【Leetcode】1793. 好子数组的最大分数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 给你一个整数数组 n u m s nums nums &#xff08;下标从 0 0 0 开始&#xff09;和一个整数 k k k 。 一个子数组 ( i , j ) (i, j) (i,j) 的 分数 定义为 m i n ( n u m s …

ROS2从入门到精通0-3:VSCode 搭建 ROS2 工程环境

目录 0 专栏介绍1 Ubuntu下安装VSCode1.1 基本安装1.2 将VSCode添加到侧边栏 2 VSCode集成相关插件3 VSCode运行ROS2环境步骤3.1 安装编译依赖项3.2 创建工作空间和源码空间3.3 启动VSCode与配置 4 测试工程环境4.1 C版本4.2 Python版本 0 专栏介绍 本专栏旨在通过对ROS2的系统…

一、初识 web3

瑾以此系列文章&#xff0c;献给那些出于好奇并且想要学习这方面知识的开发者们 在多数时间里&#xff0c;我们对 web3 的理解是非常模糊的 就好比提及什么是 web1 以及 web2&#xff0c;相关概念的解释是&#xff1a; 1. 从 Web3 的开始 Web3&#xff0c;也被称为Web3.0&…

idea error java:compilation failed:internal java compiler error

idea中编译运行maven项目报错如下 idea error java:compilation failed:internal java compiler error 尝试如下操作 注意&#xff1a;jdk8 需要设置4个地方 1.首先打开File->Project Structure中的Project&#xff0c;将SDK和language level都设置一致&#xff0c;如下…

基于Java的考研专业课程管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

文件操作:文本文件(写/读)

文件操作可以将数据永久化&#xff0c;C中对文件操作需要包含头文件 < fstream > 文件类型分为两种&#xff1a; 1. 文本文件&#xff1a;文件以文本的ASCII码形式存储在计算机中 2. 二进制文件&#xff1a;文件以文本的二进制形式存储在计算机中&#xff0c;…

matplotlib绘制统计特征图和分布特征图

文章目录 一、统计特征图绘制1.需求2.代码方法一方法二总结 二、分布特征图绘制1.需求2.代码 一、统计特征图绘制 1.需求 我现在有两个数据集Pdata和Cdata分别在DataFrame对象中&#xff0c;我现在想对这两个数据集进行统计特征分析&#xff0c;并用直方图展示出来。 2.代码…

CSS学习(3)-浮动和定位

一、浮动 1. 元素浮动后的特点 脱离文档流。不管浮动前是什么元素&#xff0c;浮动后&#xff1a;默认宽与高都是被内容撑开&#xff08;尽可能小&#xff09;&#xff0c;而且可以设置宽 高。不会独占一行&#xff0c;可以与其他元素共用一行。不会 margin 合并&#xff0c;…

护眼大路灯好不好用?中国路灯排行榜

护眼大路灯好不好用&#xff1f;关于这个问题一直有争议&#xff0c;一部分人觉得大路灯不好用&#xff0c;而且会增加支出&#xff0c;绝大多数人则认为大路灯特别好用&#xff0c;之所以会有不同的看法&#xff0c;小编觉得&#xff0c;还是大家使用的大路灯不同&#xff0c;…

[C语言]——函数递归

目录 一.什么是递归 1.递归的思想&#xff1a; 二.递归的限制条件 三.递归举例 1.举例1&#xff1a;求n的阶乘 1.1分析和代码实现 1.2画图推演 2.举例2&#xff1a;顺序打印⼀个整数的每⼀位 2.1分析和代码实现 2.2画图推演 四.递归与迭代 1.举例3&#xff1a;求第…