atoi函数实现,atoi用法

  atoi函数实现,atoi用法

  今天前言就给大家讲解一下atoi这个功能是怎么实现的。

  也许你还不明白这一点。大致解释一下,就是把一个字符类型的数字转换成十进制的int类型。代码运行如下:

  看这里,字符串中的数字是123,所以我们要打印出来的应该是塑料类型的123(一百二十三):

  但不仅如此,这个功能还是需要判断的。如果这个字符是空格,或者其他类型的空字符,那么跳过这个字符来判断下一个字符是什么。直到不是空白字符,才能进行下一步判断。让我向您展示这个函数如何处理空白字符:

  如果空白字符后跟字符类型号,它仍将被打印为int类型,但如果是 \0 ,它可以返回值0,如下所示:

  您可以看到返回值是0,如果我们的空格字符后面跟有除了符号和数字符号以外的字符,例如像a、b、c这样的字符,它们都将返回0,如下所示:

  如你所见,即使我们后面有数字字符,如果我们前面有非数字字符和空白字符,我们会直接返回0,不需要任何转换或其他操作,有:

  当我们前面有一个加减号时,我们可以给输出值加符号,但是:

  这种符号同时存在,他只判断符号一次,如果后面有非字符数值,会被当作直接返回,包括这个:

  只要进行数字判断或者符号判断(符号判断只做一次,后面处理所有非数字字符),任何非数字字符再次出现,之前已经转换过的值打印出来。到现在,大家应该明白这个函数的用途了,然后才是正文。

  我把这个功能分成三个部分,

  第一部分判断它是空白字符还是其他字符(包括第二部分),

  第二部分,判断符号,

  第三部分是字符和数字的转换。

  好了,接下来是第一部分,判断:

  在第一个循环中,我使用了一个库函数,因为其他空白字符的范围有点大。如果我们用ascll值来判断某个墨水,我们就用isspace这个函数来判断。我将为您打印出该功能的信息:

  返回值带有以下参数

  所以我们可以用while循环因为如果是false,我们会返回并跳出循环,每次判断都会p;p的地址指向下一位,

  当不是空白字符时,判断符号和非数字字符。如果是正字符,那么folg=0,如果是符号folg=1;否则就不是加减运算符,可以跳出来了。判断结束了,下一个阶段就是皈依。

  转换:

  我用Count来存储数字字符的数量。每次循环计数的时候,如果中间遇到非数字字符,我会直接跳出来,停止计数。这就是为什么我们把判断放在进入循环的位置,如果不是数字字符就直接跳出来。最后,我们将记录数字字符的数量。现在是转换的开始。把char类型转换成int类型,画个图给你解释一下:

  ,因为后面跟着/=10,所以每次循环后我的I的值会变成前一个值的十分之一,直到最后1/10=0;跳出循环,但是循环中还有一个判断,就是超过最大值还是小于最小值,因为那样的话计算机可能会出错,所以直接返回0;

  如果我们的flog为0,则是返回ret的整数,如果为1,则为负,返回值为-ret;

  这样我们的atoi函数就实现了,但是有一个小点我没讲,就是我们要解引用P,变成字符P,最后需要减去48,因为减去48就是把字符串转换成数字。其实减去48和减去一个‘0’(字符0)是一样的,因为字符0的ascll值是48,和上面的意思是一样的。

  好了,接下来的代码如下:

  # include断言。h #包含stdlib。h #包括ctype。h////int atoi(const char * str);#包括数学。h long long my _ atoi(const char * p){ assert(p);while(是空格(* p)){ p;} int flog=0;if(* p 57 * p 48){ if(* p== ){ flog=0;p;} else if(* p==-){ flog=1;p;}否则返回0;} else { long long ret=0;const char * arr=p;int count=0;while(* p){ if(* p 57 * p 48){ break;}计数;p;} int I=0;//123 for (i=(int)pow(10,count-1);I I/=10){ ret=ret(* arr-48)* I;arrif((ret INT _ MAX) (ret INT _ MIN)){ return 0;} } if(flog==0){ ret ret;} else ret-ret;} } int main(){ char arr[20]= 1 23 ;//printf(%lld\n ,my _ atoi(arr));printf(%d ,atoi(arr));返回0;}运行结果如下:

  好的,这次的斯托伊函数讲解就到这里了,谢谢大家观看,希望帮助到大家。

  再见!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: