atoi(ASCII to integer),把字符串转换成整型数。

情况一:输入的字符包含不是数字字符的字符?
例如:“123adc4”.
针对这种情况,我们只要加上判断就行了,只要遇到不是数字字符的直接返回。

情况二:如果在数字字符前面有正负号又该怎么办???
例如:”-123”、“+123”.
针对这种情况,我们再加上判断,判断字符串的第一个字符是不是正负号,并用一个标记位flag记录正负。

情况三:当输入的字符串前面几个字符都是空格又该怎么办???
例:“ -123”,“ +123”.
针对这种情况,库里面的atoi是将空格跳过再进行判断的,所以我们在一开始就用循环将空格跳过,注意这时候要是字符串里面全部是空格,则我们应该返回一个值,就返回0吧。

情况四:当输入的字符串中没有数字时,我们应该返回什么呢???
我们在这种情况下返回0.

情况五:当字符串中的字符数字转化的整数太大,会有可能溢出???
针对这种情况,我们需要做出一个判断,判断转化后的数字当它的范围在long的范围内。

那么最重要的一个问题来了,当你第3、4中情况下,返回的是0,如果输入“0”返回的也是0,这两个0怎么区分呢???,貌似在这里你把3、4两种情况下的返回值设置成什么都不合适。所以我们可以设置一个全局变量state,来记录是不是正常返回。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>enum State
{NORMAL,                        //正常ABNORMAL                       //异常
}state;
state = ABNORMAL;                    //将初始状态置为异常
int my_atoi(const  char *src)
{assert(src);int flag = 1;long long ret = 0;while (*src==' ')                           //跳过空格{src++;}if (*src == '\0')                           //如果这时候字符串已经完了,则直接返回{return  0;}if (*src == '+')                            //接下来判断正负{src++;}else if (*src == '-'){flag = -1;src++;}while (*src >= '0'&&*src <= '9')             //读取字符数字转换成整型{ret = ret * 10 + flag*(*src-'0');if (ret >= INT_MAX|| ret <= INT_MIN)          //如果溢出的话直接跳出{break;}src++;}if (*src == '\0')                         //正常返回state = NORMAL;                       //将状态置为正常return (int)ret;
}
int main()
{char arr[50] = { 0 };scanf("%s", arr);int ret=my_atoi(arr);if (state == ABNORMAL)printf("异常返回\n");printf("%d\n", ret);system("pause");return 0;
}

自己实现一个 atoi 函数相关推荐

  1. Leetcode错题本1-实现一个 atoi 函数,使其能将字符串转换成整数。

    题目描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止.接下来的转化规则如下: 如果第一个非空字符为正或者 ...

  2. atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  3. 编写实现atoi函数

    题目:给定一个字符串,要求转成整数,不允许使用atoi或者其它类似库函数. 方案:实现这个函数并不难,但是要考虑以下几个问题 1.考虑字符串为空指针的时候            2.考虑字符串为空串 ...

  4. C语言atoi()函数(字符串转整数int类型)(atol()转换为long)

    需包含头文件:C 标准库 - <stdlib.h> 文章目录 描述 声明 参数 返回值 实例 在windows VS上测试 20211206 用atoi转换long,发现溢出了 描述 C ...

  5. C语言中atoi()函数的用法

    C语言中atoi()函数的用法 一.学习要点: 1.int atoi(const char *str)把参数str所指向的字符串转换为一个整数: 二.代码 #include<stdio.h> ...

  6. atoi函数_吊打面试官 | 腾讯经典考点写代码实现atoi函数

    点击蓝字关注我哦 以下是本期干货视频视频后还附有文字版本哦 ▼<腾讯经典考点-写代码实现atoi函数>▼ ps:请在WiFi环境下打开,如果有钱任性请随意 在腾讯面试时,经常会被问到如何用 ...

  7. C语言atoi()函数:将字符串转换成int(整数)和sprintf和memset

    atoi()函数 #include <stdio.h> #include <stdlib.h>int main () {int i;char buffer[256];print ...

  8. 3 年大厂工作经验面试竟然要我手写 atoi 函数

    文章目录 前言 我遇到的问题 标准库的实现 适合面试手写的 atoi 实现 参考文献 前言 手写代码是面试过程常见的环节之一,但是一般都是手写算法题,此次面试官要我手写一个基本的 C 语言 atoi, ...

  9. B00004 atoi函数

    这是一个通用的基础程序,将数字字符串转换为整型数. 程序如下: /* atoi函数:将字符串s转换为相应的整型数 */#include <stdio.h> #include <cty ...

最新文章

  1. 微信小程序分享注意点
  2. php 关于文件的一些封装好的函数
  3. 一次关于 Mysql 索引优化的思考
  4. 程序直接控制I/O方式
  5. 人脸颜值评分软件_在线算个颜值,特科学的那种 | 知多少
  6. 用PyMC3进行贝叶斯统计分析(代码+实例)
  7. 交流信号叠加直流偏置_放大器偏置电流Ib需要完整的直流回路
  8. PCL点云CSV转PCD文件
  9. org.apache.commons.dbutils.QueryRunner 执行sqlserver的存储过程
  10. python生成图片链接_python如何将两张图片生成为全景图片
  11. jQuery学习笔记03
  12. 米思齐(Mixly)图形化系列教程(一)-Mixly软件安装及界面功能介绍
  13. 探索Perl的世界(更新到第十七章57集)
  14. R语言使用strsplit函数按照指定的分隔符号进行数据拆分、分裂(split)、分割后的数据类型为列表、unlist函数将拆分后生成的列表list转化为向量vector
  15. CSDN 空间:“迷你博客”很迷人(1)
  16. 你拍一我拍一上学得学计算机,儿歌《你拍一,我拍一》
  17. Android shape画一个圆角虚线框
  18. 手机不小心把计算机隐藏了怎么恢复出厂设置,图标隐藏了怎么弄出来(手机图标隐藏了怎么恢复)...
  19. ysoserial URLDNS解析
  20. 硬件-3-家庭联网常用设备

热门文章

  1. Hadoop是小象——Hadoop集群安装配置
  2. NFT Insider #44:The Sandbox 和华纳音乐达成合作,NFT 领域融资频繁
  3. 济民可信20亿战略资金助力大健康产业,一号护工建立护工行业标准
  4. Codeforces Round #704 (Div. 2)-A. Three swimmers-题解
  5. android 抽屉式侧滑菜单
  6. 7.8.0版本知云文献翻译修改了PDF图标,改为旧版本图标的方法
  7. Linux--zabbix网络监控系统
  8. Ardunio实现按钮控制LED常亮或常灭
  9. javaweb面试题(全)
  10. 在虚拟机中使用命令下载文件方法