gpt4 book ai didi

C语言模拟实现atoi函数的实例详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C语言模拟实现atoi函数的实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

C语言模拟实现atoi函数的实例详解 。

atoi函数,主要功能是将一个字符串转变为整数,例如将“12345”–>12345。但在实现过程中,我们难免会因为考虑不够全面而漏掉比较重要的几点,今天就总结一下实现atoi函数需要注意的地方.

1.指针为NULL 2.字符串为空字符串 3.空白字符 4.正号与负号问题 5.溢出问题 6.异常字符处理 。

接下来看代码:(具体几种问题处理都在代码的注释中说明) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <assert.h>
 
//定义两个枚举常量来表示状态
enum STATE
{
   VALID, //合法
   INVALID, //非法
};
enum STATE state = INVALID;
int my_atoi( const char *str)
{
   int flag = 1;
   long long ret = 0; //定义为比int存储范围还要大的类型,防止后面判断溢出时出错。
   //空指针
   assert (str);
   //空字符串
   if (*str == "\0" )
   {
     return 0;
   }
   //空白字符
   while ( isspace (*str)) //用函数isspace判断是否为空白字符
   {
     str++;
   }
   //遇到正负号
   if (*str == '-' )
   {
     flag = -1;
     str++;
   }
   if (*str == '+' )
   {
     str++;
   }
   //
   while (*str)
   {
     //if (*str >= '0'&&*str <= '9')
     if ( isdigit (*str)) //用函数isdigit判断是否为数字字符
     {
       ret = ret * 10 + flag*(*str - '0' );
       //判断是否溢出
       if (ret > INT_MAX || ret < INT_MIN)
       {
         return ret;
       }
     }
     //异常字符
     else
     {
       break ;
     }
     str++;
   }
   state = VALID;
   return ret;
}
int main()
{
   char *p = "12345" ;
   char *q = " -12345" ;
   int ret = my_atoi(p);
   int ret2 = my_atoi(q);
   printf ( "%d\n" , ret);
   printf ( "%d\n" , ret2);
   system ( "pause" );
   return 0;
}

运行结果:

C语言模拟实现atoi函数的实例详解

以上就是C语言模拟实现atoi函数的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 。

原文链接:http://blog.csdn.net/qq_34021920/article/details/76223334 。

最后此篇关于C语言模拟实现atoi函数的实例详解的文章就讲到这里了,如果你想了解更多关于C语言模拟实现atoi函数的实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com