当前位置:   article > 正文

模拟实现atoi()—— C语言

模拟实现atoi()—— C语言

库函数atoi(),将所指向的字符串转换为一个整数(类型为int型)

目录

1.库函数 atoi()

2.库函数 atoi()的实现

3.库函数atoi()的模拟实现


1.库函数 atoi()

声明

int atoi(const char *str)

参数          str -- 要转换为整数的字符串。

返回值         函数返回转换后的长整数,如果没有执行有效的转换,则返回零。

头文件         <stdlib.h>

注意  atoi的规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。

2.库函数 atoi()的实现

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. int val;
  7. char str[20];
  8. strcpy(str, "989934896");
  9. val = atoi(str);
  10. printf("字符串值 = %s, 整型值 = %d\n", str, val);
  11. strcpy(str, "123runoob.com");
  12. val = atoi(str);
  13. printf("字符串值 = %s, 整型值 = %d\n", str, val);
  14. return(0);
  15. }

3.库函数atoi()的模拟实现

  1. int main()
  2. {
  3. char arr[20] = " -12a34";
  4. int ret = my_atoi(arr);
  5. printf("%d\n", ret);
  6. return 0;
  7. }

先把主函数函数写好,下面来考虑字符串出现的可能形式

字符串中可能出现:

1.数字形式的字符

2.空指针

3.空字符串

4.非数字字符

5.前面有空白字符

6.前面有+-

下面来实现

  1. #include<assert.h>
  2. #include<ctype.h>
  3. #include<limits.h>
  4. enum status
  5. {
  6. VALID,
  7. INVALID
  8. }status=INVALID;//非法
  9. int my_atoi(const char* str)
  10. {
  11. int flag = 1;
  12. //空指针
  13. assert(str);
  14. //字符串为空
  15. if (*str == '\0')
  16. {
  17. return 0;
  18. }
  19. //空白字符
  20. while (isspace(*str))
  21. {
  22. str++;
  23. }
  24. //正负号
  25. if (*str == '+')
  26. {
  27. flag = 1;
  28. str++;
  29. }
  30. else if(*str=='-')
  31. {
  32. flag = -1;
  33. str++;
  34. }
  35. //数字字符
  36. long long n = 0;
  37. while (*str!='\0')
  38. {
  39. if (isdigit(*str))
  40. {
  41. n = n * 10 +flag*(* str - '0') ;//存放比整型更大的值
  42. if (n<INT_MIN || n>INT_MAX)
  43. {
  44. n= 0;
  45. break;
  46. }
  47. }
  48. else
  49. {
  50. break;
  51. }
  52. str++;
  53. }
  54. if (*str == '\0')
  55. {
  56. status = VALID;
  57. }
  58. return (int)n;
  59. }
  60. int main()
  61. {
  62. char arr[20] = " -12a34";
  63. int ret = my_atoi(arr);
  64. if (status == VALID)
  65. printf("合法转化:%d\n", ret);
  66. else
  67. {
  68. printf("非法转化:%d\n", ret);
  69. }
  70. return 0;
  71. }

 


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

闽ICP备14008679号