当前位置:   article > 正文

C语言-atoi函数的使用和实现

C语言-atoi函数的使用和实现

atoi是C语言中常见的函数。大家可能对于他不太熟悉,其主要还是因为学校可能没有讲到。其实有很多函数像atol、atof都是一样的,本篇文章以atoi为例,剩余大家如果感兴趣可以再去了解。

目录

1.函数介绍

2.代码演示

3.atoi函数的模拟实现

4.扩展


1.函数介绍

int atoi (const char * str);

功能:

1.解析字符串的内容,将字符串转化成整数

2.atoi的使用需要包含头文件<stdlib.h>

参数:

str:指针,指向了待转化的字符串

返回值:

转化成功的话,返回转化得到的整数,如果是空字符串或者是跳过空白字符后第一个不是数字字符将返回0,如果转化得到数字超出int的取值范围,则是未定义的行为。

2.代码演示

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. printf("%d\n", atoi(" "));
  6. printf("%d\n", atoi(" abc"));
  7. printf("%d\n", atoi("123"));
  8. printf("%d\n", atoi(" 123"));
  9. printf("%d\n", atoi(" +123"));
  10. printf("%d\n", atoi(" -123"));
  11. printf("%d\n", atoi(" -123abc"));
  12. printf("%d\n", atoi("111111111111111111111111111"));//行为未定义
  13. return 0;
  14. }

输出结果:VS2022

  1. 0
  2. 0
  3. 123
  4. 123
  5. 123
  6. -123
  7. -123
  8. 2147483647

3.atoi函数的模拟实现

atoi函数的模拟实现可能有些复杂,但一定要理清思路:要先跳过空白字符,再看有无+-,如果有还需考虑最后的符号,用flag记录;同时ret值不能大于最大,也不能小于最小。

  1. int my_atoi(const char* str)
  2. {
  3. //跳过空白字符
  4. while (isspace(*str))
  5. str++;
  6. //判断正负符号
  7. int flag = 1;
  8. if (*str == '+')
  9. {
  10. str++;
  11. }
  12. else if (*str == '-')
  13. {
  14. flag = -1;
  15. str++;
  16. }
  17. //用ret记录值
  18. long ret = 0;
  19. while (*str != '\0')
  20. {
  21. //判断是否是数字字符
  22. if (isdigit(*str))
  23. {
  24. //转化为整型,如'1'-'0'=1
  25. ret = ret * 10 + (*str - '0') * flag;
  26. //最大只能INT_MAX,最小只能INT_MIN
  27. if (ret > INT_MAX)
  28. {
  29. ret = INT_MAX;
  30. }
  31. else if (ret < INT_MIN)
  32. {
  33. ret = INT_MIN;
  34. }
  35. }
  36. else
  37. return (int)ret;
  38. str++;
  39. }
  40. return (int)ret;
  41. }

4.扩展

其实还有两个函数可以了解一下:

1.atol:将字符串转换成long类型,转换的范围是比atoi要更大一些。

2.strtol:将字符串转换成long类型,这个函数更加复杂,可以按照各种进制转换。

可以扩展学习一下。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/481577
推荐阅读
相关标签
  

闽ICP备14008679号