模拟实现 atoi 函数

一、函数介绍

原型 

int atoi(const char *nptr);

二、使用atoi

三、使用发现

可以发现:会先过滤掉空格,还能识别正负号,当第一次遇到正负号了,后面没接着是数字就返回0,
如果+45 5aa 结果是45,说明前面识别了数字,如果后面被中断了,转换也就停止了
第一个不是数字也就返回0 

四、模拟实现

int sign = 0;//作为合法与非法转换的标志
int My_atoi(const char* str)
{
    int flag = 1;  //做符号标识
    long long  ret = 0;  //用来存储字符串转换的数字,存储数据比int大
    while (*str == ' ')  //跳过第一次出现的字符前的空格
    {
        str++;
    }
    if (  !(*str >= '0' && *str <= '9') && (*str!='-')&&(*str!='+')  )//如果第一个字符不是数字,也不是正负号,直接返回0
        return 0;
    if (*str == '-')     //如果第一个字符是负号,说明是负数
    {
        flag = -1;//flag赋值为-1
        str++;  //移动到符号,的下一位
        if (*str >= '0' && *str <= '9')//如果符号位后面紧跟是数字,正常进行
        {
            ret = 0;
            while (*str >= '0' && *str <= '9')
            {
                ret = ret * 10 + (*str - '0');// 字符的数字减 '0' ,就得到了这个字符代表的数字
                str++;
            }
            if (*str == '\0') //如果str到了'\0'就是合法转化,否则是非法
                sign = 1;
            ret *= flag;// 将结果乘上符号标识
            if (ret < INT_MIN)  //如果比INT_MIN还要小,就只能返回INT_MIN
                ret = INT_MIN;   
            return (int)ret ;  //强制类型转换
        }
        else    //如果符号位后面紧跟不是数字,就返回0,
           return 0;
    } 


    else     //如果第一个字符是负号,说明是负数
    {
        flag = 1; 
        if(*str=='+')  
        str++;    //如果有+ ,就移动到符号的下一位,没有+号,就不要
        if (*str >= '0' && *str <= '9')//如果符号位后面紧跟是数字,正常进行
        {
            ret = 0;
            while (*str >= '0' && *str <= '9') 
            {
                ret = ret * 10 + (*str - '0');//字符数字减 '0' ,就得到了数字
                str++;  //移到下一位
            }
            if (*str == '\0')  //如果str到了'\0'就是合法转化,否则是非法
                sign = 1;
            ret *= flag;
            if (ret > INT_MAX)   //如果比INT_MAX还要大,就只能返回INT_MAX
                ret = INT_MAX;
            return (int)ret; //强制类型转换
        }
        else                //如果符号位后面紧跟不是数字,就返回0,
            return 0;
    }
}

int main()
{
    char arr[20] = "  245  ";
    int ret = My_atoi(arr);
    if (sign == 1)
        printf("合法转换:%d\n", ret);
    else
        printf("非法转换:%d\n", ret);
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript代码执行原理

JavaScript代码是如何被机器理解并执行的呢&#xff1f; 作为 JavaScript 开发者&#xff0c;通常我们不需要关心JavaScript引擎是如何执行代码的。但是&#xff0c;了解 JavaScript 引擎的工作原理&#xff0c;知晓它如何处理我们编写的 JS 代码、肯定是有益的。 注意&#…

面试算法-94-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

微服务之Nacos配置管理

文章目录 前言一、统一配置管理Nacos操作二、统一配置管理java操作1.引入依赖2.创建配置文件3.测试4.总结 三、Nacos配置自动更新1.添加注解RefreshScope2.使用ConfigurationProperties注解3.总结 四、Nacos多环境配置共享1.配置文件2.多种配置的优先级3.总结 总结 前言 一、统…

飞鸟写作能用吗 #笔记#笔记

飞鸟写作是一个强大的论文写作工具&#xff0c;不仅可以帮助用户高效、准确地完成论文写作&#xff0c;还能帮助用户对论文进行查重和降重。那么&#xff0c;飞鸟写作能用吗&#xff1f;答案是肯定的&#xff0c;飞鸟写作非常好用&#xff01; 首先&#xff0c;飞鸟写作拥有强大…

2024智能EDM邮件营销系统使用攻略

在数字化营销领域&#xff0c;智能EDM&#xff08;Electronic Direct Mail&#xff09;邮件营销作为一种高效、精准的推广方式&#xff0c;正日益受到企业的高度重视。而要实现这一策略的成功落地&#xff0c;一个高可靠性和高稳定性的专业邮件发送平台则是不可或缺的关键环节。…

Nginx 故障排查之斜杠(/) --(附 Nginx 常用命令)

问题场景&#xff1a; 项目中用到了多个子域名&#xff0c;测试环境通过子域名进行接口访问的时候返回 404 NOT_FOUND&#xff0c;经过排查测试后确定是 Nginx 配置问题&#xff0c;而导致事故的根本原因是运维在Nginx配置的时候少配置了一个斜杠&#xff08;/&#xff09;&am…

Qt播放音乐代码示例

主界面 点击play按钮播放或暂停音乐&#xff0c;拖动进度条&#xff0c;音乐对应播放。 QWidget window;QPushButton* playButton new QPushButton("Play");// Qt 播放音乐// 创建 QMediaPlayer 对象QMediaPlayer* player new QMediaPlayer;// 指定音频文件的路径…

【IIS】应用程序池“xxxx”将被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误。

应用程序池“xxxx”将被自动禁用&#xff0c;原因是为此应用程序池提供服务的进程中出现一系列错误。 发现其他网站是正常访问&#xff0c;对比发现路径凭据身份差异&#xff0c;这个网站指定用户访问&#xff0c;因为是物理机P2V到虚拟机上的。调整为应用程序用户&#xff0c;…

双系统安装04--在已有统信UOS基础上安装Windows10

原文链接&#xff1a;双系统安装04–在已有统信UOS基础上安装Windows10 Hello&#xff0c;大家好啊&#xff01;继我们之前的双系统安装系列文章之后&#xff0c;今天我非常高兴地为大家介绍双系统安装的第四篇——在已有的统信桌面操作系统上安装Windows 10。这对于那些希望在…

k8s笔记27--快速了解 k8s pod和cgroup的关系

k8s笔记27--快速了解 k8s pod和 cgroup 的关系 介绍pod & cgroup注意事项说明 介绍 随着云计算、云原生技术的成熟和广泛应用&#xff0c;K8S已经成为容器编排的事实标准&#xff0c;学习了解容器、K8S技术对于新时代的IT从业者显得极其重要了。 之前在文章 docker笔记13–…

Excel通过下拉菜单,显示不同图片

背景&#xff1a;有的时候需要通过更改下拉菜单来改变对应的 值/ 图片。 如果是数值的话就是我们常常用的Vlookup&#xff0c;这个可以很简单的实现这个功能。&#xff08;这个如果不知道请自行百度&#xff09; 但是如果是图片呢&#xff1f;这个就不常见了&#xff0c;那么…

我的创作纪念日——命运之光来到CSDN的第365天

目录 前言 机缘 最初成为创作者的初心 实战项目中的经验分享 日常学习过程中的记录 通过文章进行技术交流 收获 在创作的过程中都有哪些收获 获得了多少粉丝的关注 获得了多少正向的反馈&#xff0c;如赞、评论、阅读量等 认识和哪些志同道合的领域同行 日常 当前创…

走迷宫----bfs再矩阵图里的应用模版

对于之前走迷宫的那个题 回忆一下dfs的代码 #include <bits/stdc.h> using namespace std; int a[110][110]; bool check[110][110]; int n,m; int ans1e9; int nxt[4][2]{{1,0},{0,-1},{-1,0},{0,1}}; void dfs(int x,int y,int step){if(xn&&ym){ansmin(ans,…

增强现实(AR)在广告中的力量

The Power of AR in Advertising 写在前面 增强现实&#xff08;AR -Augmented Reality&#xff09;是指借助软件、应用程序和智能手机、平板电脑或耳机等设备&#xff0c;为日常生活添加视觉和音频元素的技术。如今&#xff0c;品牌和广告商可以在营销活动中使用AR&#xff0…

解放双手,自动引流——客户主动找上门

流量问题&#xff0c;无论是在实体行业还是互联网行业&#xff0c;都是一个普遍存在的难题。 只有拥有源源不断的庞大流量&#xff0c;才能更好地进行商业变现与发展。那么&#xff0c;是否存在一款全自动挂机引流的软件呢&#xff1f;答案是肯定的。接下来&#xff0c;我将根…

C++面向对象三大特征-----继承(详细版)

目录 继承 一、继承的基础介绍 普通版网页和继承版网页的区别 语法 二、继承方式 三种继承方式 三、继承中的对象模型 四、继承中构造和析构函数 五、继承同名成员的处理方式 访问同名成员&#xff1a; 作用域写法&#xff1a; 六、继承同名静态成员的处理方式 访问…

【算法每日一练]

目录 今日知识点&#xff1a; 辗转相减法化下三角求行列式 组合数动态规划打表 约数个数等于质因数的次方1的乘积 求一个模数 将n个不同的球放入r个不同的盒子&#xff1a;f[i][j]f[i-1][j-1]f[i-1][j]*j 将n个不同的球放入r个相同的盒子&#xff1a;a[i][j]a[i-j][j]a[…

Qt/C++通用跨平台Onvif工具/支持海康大华宇视华为天地伟业等/云台控制/预置位管理/工程调试利器

一、前言 在安防视频监控行业&#xff0c;Onvif作为国际标准&#xff0c;几乎主要的厂商都支持&#xff0c;不仅包含了国内的厂商&#xff0c;也包括主要的国际厂商&#xff0c;由于有了这个标准的存在&#xff0c;使得不同设备不同安防平台之间&#xff0c;能够接入各个厂家的…

湖北专升本报名照片需要<40kb怎么解决

湖北专升本报名照片需要<40kb怎么解决

[ C++ ] STL---反向迭代器的模拟实现

目录 前言&#xff1a; 反向迭代器简介 list反向迭代器的模拟实现 反向迭代器的模拟实现(适配器模式) SGI版本STL反向迭代器源码 STL库中解引用操作与出口设计 适配list的反向迭代器 适配vector的反向迭代器 前言&#xff1a; 反向迭代器是一种特殊类型的迭代器&#xf…