zoukankan      html  css  js  c++  java
  • 转:atoi函数的实现

    atoi函数的实现

       写这个函数的实现的原因很简单,而且也很容易,直接抄袭的库中的源码。因为有朋友面试的时候遇到了,前几天一个哥们面intel的时候也被问到了,巧合的是今天看广联达的面试题再次遇到。一周之内看到三次,让我不得不重视一下啊,毕竟自己也要开始面试题呀面试题了!
       其实这个函数比较容易实现,不过写的很完善就不是那么容易,我自己也写了一下,然后去glibc库中看了一下,发现自己比较多的情况没有考虑到的,代码贴出来必然会被鄙视。所以这里就贴glibc库中使用的代码。本来打算贴vxwork的代码,可是vxwork的这段代码比较长而且有点晦涩,所以最后决定还是贴上相对更见简明的glibc库中的代码
       其实不管是atoi、atol都是调用的strtol这个函数,所以实际贴的是这个函数的代码。其实直接自己看glibc库就好了:
    #define LONG_MAX 2147483647L  
    #define LONG_MIN (-2147483647L-1L)
    long int _strtol_internal (const char *nptr, char **endptr, int base, int group)
    {
      unsigned long int result = 0;
      long int sign = 1;
      while (*nptr == ' ' || *nptr == '/t')
        ++nptr;
      if (*nptr == '-')
        {
          sign = -1;
          ++nptr;
        }
      else if (*nptr == '+')
        ++nptr;
      if (*nptr < '0' || *nptr > '9')
        {
          if (endptr != NULL)
     *endptr = (char *) nptr;
          return 0L;
        }
      assert (base == 0);
      base = 10;
      if (*nptr == '0')
        {
          if (nptr[1] == 'x' || nptr[1] == 'X')
     {
       base = 16;
       nptr += 2;
     }
          else
     base = 8;
        }
      while (*nptr >= '0' && *nptr <= '9')
        {
          unsigned long int digval = *nptr - '0';
          if (result > LONG_MAX / 10
       || (sign > 0 ? result == LONG_MAX / 10 && digval > LONG_MAX % 10
           : (result == ((unsigned long intLONG_MAX + 1) / 10
       && digval > ((unsigned long intLONG_MAX + 1) % 10)))
     {
       errno = ERANGE;
       return sign > 0 ? LONG_MAX : LONG_MIN;
     }
          result *= base;
          result += digval;
          ++nptr;
        }
      return (long int) result * sign;
    }
    atoi函数就是这个函数讲第二个参数置为NULL,第三个参数置为10。不知道你注意到了那些空格,越界之类的判断没有。我同学说他写出来的代码最后就被要求加上了这些东西,最后还因此被卡掉了(说是考虑不够慎密,汗)。

  • 相关阅读:
    springboot 项目部署到服务器
    Thymeleaf的注意项
    springboot定时器
    springboot
    随笔
    mysql数据库连接超过8小时失效的解决方案(springboot)
    Druid连接池与spring配置
    IDEA快捷键
    jsonp解决跨域,用div,css,js,jq实现textarea自适应高度
    mysql的查询、子查询及连接查询(商城查询常用)
  • 原文地址:https://www.cnblogs.com/zhiweiyouzhishenghuo/p/5005538.html
Copyright © 2011-2022 走看看