目录        

atoi函数的说明

函数改编以及思路

代码

代码注释


atoi函数的说明

该函数的作用是将一字符串变为一整型类型的数字输出出来,若字符串内无数字则输出0,此处输出按十进制输出。字符串开头的空格会自动扫描为空 ,

函数改编以及思路

对该函数的实现我们进行深入一步的改变,若看懂了改变后的思路便可以轻松看懂该库函数的源码。

my_atoi函数:字符串转换为整型数字:

输入 输出
123 123
-123 -123
+123 123
++---123 -123
   -----123 -123
   123wef345 123
afeef123fwf35 0

我们来分析上面表格:首先输入数字可以直接进行输出,前面为负号,则输出为负数,可以多输入正负号,我们通过负负得正的计算公式进行计算,紧接着若前面为空格,则无视空格,直接进行数字转换,若数字中间有其他字符,则直接输出字符前面的数字,字符串最前面是正负号和空格数字之外的其他字符,直接输出0;

通过以上分析,我们可以得到以下规律:

1)字符串最前面应该为数字,正负号,空格三个字符,其他均输出0;

2)数字前的正负号遵循负负得正的公式;

3)数字中不能存在其他字符,否则输出其他字符前面的数字;

思路:首先我们要直到字符串如何输出为整型数字——例如123这个数字,我们首先应该算出数字的位数,然后再算出数字,然后乘以10的长度减n次方,也就是进制转换 123=1*10^2+2*10^1+3*10^0;

解决了这个问题,我们分析正负号的问题,很显然我们根据负负得正的公式计算,不需要直到正号的个数,只需要算出负号的个数,如果负号为奇数个,则输出负号,若为偶数则直接输出数字,

然后我们看数字前后空格,其他字符类等问题,字符串刚开始前面只能是空格或者正负号和数字,但是数字有局限性,如果开始有数字那么后面字符串只要不是数字直接输出前面的数字,很显然,我么计算的正负号的个数是在数字之前的前提下进行计算。

代码:

#include<string.h>
#include<math.h>
#include<ctype.h>
#define assert
#include<stdlib.h>void getbit(char *arr, int *count1, int *count2){bool fase = true;)while (*arr == ' ' || isdigit(*arr)||*arr=='+'||*arr=='-'){if (isdigit(*arr)){while(isdigit(*arr)){(*count1)++;arr++;fase = false;}};if (!fase) break;if (*arr == '-')    (*count2)++;arr++;}
}
int atoi(char*arr){int count1 = 0,count2=0;int len = strlen(arr);if (isdigit(*arr) || *arr == '+' || *arr == '-' || *arr == ' ')getbit(arr, &count1,&count2);else return 0;int result = 0;while (*arr == ' ' || isdigit(*arr) || *arr == '+'||*arr=='-'){if (isdigit(*arr))  {while (isdigit(*arr)){result = result + ((*arr - '0')*(int)pow(10, (double)count1 - 1));count1--;arr++;}break;}arr++;}if (count2 & 1) return -1*result;else     return result;}
int main() {char arr[] = "  -545";int result = atoi(arr);printf("%d\n", result);
}

代码讲解以及注释:

#include<string.h>
#include<math.h>
#include<ctype.h>
#define assert
#include<stdlib.h>void getbit(char *arr, int *count1, int *count2){//计算数字以及正负号的个数bool fase = true;//标记(在找到数据之后不能有其他字符,此为退出循环的标记)while (*arr == ' ' || isdigit(*arr)||*arr=='+'||*arr=='-'){//字符串刚开始的限制if (isdigit(*arr)){//找到第一个数字开始计算数字个数while(isdigit(*arr)){(*count1)++;arr++;fase = false;//有了这个标记,退出小循环之后便可以直接退出循环}};if (!fase) break;//找到数字之后,后面只要不是数字直接可以不用继续遍历if (*arr == '-')    (*count2)++;//计算数字之前负号的个数arr++;}
}
int atoi(char*arr){int count1 = 0,count2=0;//有效数字的个数int len = strlen(arr);if (isdigit(*arr) || *arr == '+' || *arr == '-' || *arr == ' ')//第一个字符的限制条件getbit(arr, &count1,&count2);//第一个字符是空格数字正负号才需要计算个数else return 0;int result = 0;//需要的整数值while (*arr == ' ' || isdigit(*arr) || *arr == '+'||*arr=='-'){if (isdigit(*arr))  {while (isdigit(*arr)){//同样找到数字开始进行计算数字的和result = result + ((*arr - '0')*(int)pow(10, (double)count1 - 1));count1--;//每次数字个数减一arr++;//指针移动(上面条件得到的是字符数字,需要减去字符0才是我们需要的结果)}break;//碰到非数字,循环结束,直接退出大循环}arr++;}if (count2 & 1) return -1*result;else  return result;}
int main() {char arr[] = "  -545";int result = atoi(arr);printf("%d\n", result);
}

atoi函数(c语言)相关推荐

  1. C/C++ atoi函数 - C语言零基础入门教程

    目录 一.atoi 函数简介 二.atoi 函数函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.atoi 函数简介 在 st ...

  2. c语言字符串atoi函数,C语言实现atoi函数

    atoi函数:把字符串转换为数字(int型) int atoi_my(char *str) { int flag = 1; int number = 0; //判断是否为空 if(str == NUL ...

  3. atoi函数_C语言字符串、数字转换函数大全!

    常用到字符串和数字的转换 想找却发现网上的资料太散 所以搜集整理一下,方便给大家以后再用 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) st ...

  4. atoi函数_C语言进阶之路:strtod()函数的用法!

    函数原型: #include <stdlib.h> double strtod(const char *nptr, char **endptr); C语言及C++中的重要函数. 名称含义 ...

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

    C语言atoi()函数用法 头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * s ...

  6. C语言【atoi函数】

    C语言[atoi函数]

  7. C语言atoi函数详解

    一.atoi()基本概念 atoi是C/C++语言中一个常用的字符串转整数的函数,其原型定义在stdlib.h头文件中.它的作用是将一个字符串表示的数字转换为对应的整数. 函数原型: int atoi ...

  8. C语言 itoa函数及atoi函数

    C语言 itoa函数及atoi函数 itoa函数及atoi函数 2007-05-11 13:52 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用ito ...

  9. C语言 atoi 函数解析

    文章目录 前言 atoi函数的介绍 atoi函数的使用 atoi函数的自我实现 附:C++完整无缺版自我实现 写在最后 前言 对于atoi函数大家可能会有些陌生,不过当你选择并阅读到这里时,请往下阅读 ...

  10. 自己用C语言写itoa 函数和atoi函数

    有些库中有atoi()函数,但没有itoa()函数,怎么办?自己写啊!!! 一:先来看看库atoi()函数和itoa()函数的用法: 1.atoi 是把字符串转换成整型数的一个函数,int atoi( ...

最新文章

  1. Net设计模式之简单工厂模式(Simple Factory Pattern)
  2. C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
  3. idea设置包为层级结构?
  4. 图像处理实战 多张曲线同图共舞
  5. python字符串替换功能string.replace()可以用正则表达式,更优雅
  6. php jquery模板替换图片,仿jquery插件官网头像更换(原创)
  7. fatal: could not read Username for 'https://github.com': No such file or directory
  8. [Linux] 编译 与 链接
  9. R语言系列:多元统计分析简介
  10. MATLAB调用OpenCV流程(MATLAB R2016a+OpenCV3.1.0+VS2010
  11. Android手机RTMP播放工具(APK,支持秒开)
  12. IDEA的常用快捷键(超详细)
  13. 如何使用Python来提取视频中的音频
  14. 重装系统时的硬盘格式化
  15. python图片分析中央气象台降水量预报_全国降水量预报图。图片来源:中央气象台网站...
  16. 互联网 年龄歧视_太老了,无法玩:年龄歧视和游戏
  17. 兵团教师计算机水平考试免考条件,中小学教师等6类人员 职称评审可免考外语...
  18. 如何零成本实现微信公众号自助查券返利机器人(一)
  19. Netflix是怎么火起来的
  20. 计算机网络fmd是什么意思,不用就亏大了!酷炫又不用花钱的Win10“黑科技”

热门文章

  1. event_base
  2. pc 小程序获取拼音首字母排序及跳转
  3. 谷歌MapReduce论文学习
  4. 进入BOIS 重装系统
  5. mysql 触发器使用详解
  6. Odin Inspector 系列教程 --- 初识 OdinWindow
  7. VBA,excel中选择特定内容复制粘贴
  8. 计算机考证操作题文件
  9. 中国已有一家类三星的企业,做得比华为更广泛
  10. html colgroup span,html - Span attribute on colgroup and col - Stack Overflow