Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104471
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 352
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-23 12:37
文章分类

全部博文(41)

文章存档

2015年(1)

2014年(28)

2013年(12)

我的朋友

分类: C/C++

2014-09-04 16:26:24

借鉴《c陷阱与缺陷》这本书,实现atoi函数:

点击(此处)折叠或打开

  1. int my_atoi(char* pstr)
  2. {
  3.     int Ret_Integer = 0;
  4.     int Integer_sign = 1;
  5.       
  6.     /*
  7.     * 判断指针是否为空
  8.     */
  9.     if(pstr == NULL)
  10.     {
  11.         printf("Pointer is NULL\n");
  12.         return 0;
  13.     }
  14.       
  15.     /*
  16.     * 跳过前面的空格字符
  17.     */
  18.     while(isspace(*pstr) == 0)
  19.     {
  20.         pstr++;
  21.     }
  22.       
  23.     /*
  24.     * 判断正负号
  25.     * 如果是正号,指针指向下一个字符
  26.     * 如果是符号,把符号标记为Integer_sign置-1,然后再把指针指向下一个字符
  27.     */
  28.     if(*pstr == '-')
  29.     {
  30.         Integer_sign = -1;
  31.     }
  32.     if(*pstr == '-' || *pstr == '+')
  33.     {
  34.         pstr++;
  35.     }
  36.       
  37.     /*
  38.     * 把数字字符串逐个转换成整数,并把最后转换好的整数赋给Ret_Integer
  39.     */
  40.     while(*pstr >= '0' && *pstr <= '9')
  41.     {
  42.         Ret_Integer = Ret_Integer * 10 + *pstr - '0';
  43.         pstr++;
  44.     }
  45.     Ret_Integer = Integer_sign * Ret_Integer;
  46.       
  47.     return Ret_Integer;
  48. }
实现的atol函数如下:

点击(此处)折叠或打开

  1. long my_atol( char *str)
  2. {
  3.     long ret = 0;
  4.     int neg = 0;
  5.     int n = 0;
  6.     char *dig = "0123456789";

  7.     while(isspace(*str))
  8.         str++;

  9.     switch(*str)
  10.     {
  11.         case '-':
  12.             neg = 1;
  13.         case '+':
  14.             str++;
  15.             break;
  16.     }

  17.     while(*str >= dig[0] && *str <= dig[9])
  18.     {
  19.         n = *str++ - dig[0];
  20.         if(neg == 1)
  21.             n = -n;
  22.         ret = ret * 10 + n;
  23.     }

  24.     return ret;
  25. }


    

阅读(874) | 评论(0) | 转发(0) |
0

上一篇:JUnit

下一篇:将博客搬至CSDN

给主人留下些什么吧!~~