• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
qianye0905
博客园    首页    新随笔    联系   管理    订阅  订阅
atoi函数的实现

写atoi函数的时候需要注意一下几点

1. 字符串前的空白

2. 字符串所表示数值的正负号

3. 结束条件,遇到非数字或者字符'\0'结束

4. 考虑溢出,分别与int值所能表示的最大(0x7fffffff)和最小值(0x8000000)进行比较

5. 考虑异常输入情况下,用全局变量valid来标识,对于"+/-"  "0" "+abc"需要进行区分

 

 1 #define INT_MAX ((int)0x7FFFFFFF)
 2 #define INT_MIN ((int)0x80000000)
 3 //#define INT_MAX (~(unsigned int)0/2)
 4 
 5 bool valid=true;
 6 
 7 int myatoi(const char * str)
 8 {
 9     bool minus=false;
10     long long result=0;
11     valid=false;
12     if(str==NULL)
13         return 0;
14     while(*str==' ')
15         str++;
16     if(*str=='-')
17     {
18         minus=true;
19         str++;
20     }
21     else if(*str=='+')
22         str++;
23     if(*str<'0'||*str>'9')
24         return 0;
25 
26     valid=true;
27     while(*str>='0' && *str<='9')
28     {
29         result=result*10+*str-'0';
30         if((minus && result>INT_MAX + 1LL) || (!minus && result>INT_MAX))
31         {
32             valid=false;
33             return 0;
34         }
35 
36         str++;
37     }
38 
39     if(minus)
40         result*=-1;
41     return (int)result;
42 }

 

posted on 2013-03-18 21:57  qianye0905  阅读(9198)  评论(2)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3