zoukankan      html  css  js  c++  java
  • 编写atoi库函数

      看到很多面试书和博客都提到编写atoi函数,在很多面试中面试官都会要求应聘者当场写出atoi函数的实现代码,但基本很少人能写的完全正确,倒不是这道题有多么高深的算法,有多么复杂的数据结构,只因为这道题要考虑的情况比较多,大部分应聘者都没能把所有情况都考虑到,能很好的考察应聘者的编程基本功和思考问题全面性等能力。一看到这道题目我的第一反应是这么简单啊,不就是把一个字符串转化成整数吗?然后速度写下了实现代码,然后测试了下,貌似结果也正确,然后再看了看书和博客上的实现,发现自己很多种情况都没考虑进去,自己测试的也只是自己考虑的一两种情况。

      这道题目要考虑的情况还真是很多,比如:如果传的字符串指针为NULL;如果传的字符串为空;如果传的字符串中包含非法的字符;如果传的字符串中包含+-符号;如果字符串代表的整数超过了整数能表示的范围...,看了这么多情况,真心感觉实现这个函数还真不是件简单的事,下面贴出我自己重新写的atoi函数。

     1 int myError = 0;
     2 
     3 int atoi(const char *str)
     4 {
     5     bool is_f = false;
     6     long long result = 0;
     7 
     8     myError = 0;
     9     if (str == NULL || *str == 0)
    10     {
    11         myError = -1;
    12         return 0;
    13     }
    14     if (*str == '+' || *str == '-')
    15     {
    16         if (*str == '-')
    17             is_f = true;
    18         ++str;
    19         if (*str == 0)
    20         {
    21             myError = -1;
    22             return 0;
    23         }
    24     }
    25     while (*str)
    26     {
    27         if (!(*str >= '0' && *str <= '9') ||
    28             (!is_f && result > 0x7fffffff)
    29             || (is_f && result > 0x80000000))
    30         {
    31             myError = -1;
    32             return 0;
    33         }
    34         result = result * 10 + (*str - '0');
    35         ++str;
    36     }
    37     if((!is_f && result > 0x7fffffff)
    38         || (is_f && result > 0x80000000))
    39     {
    40         myError = -1;
    41         return 0;
    42     }
    43     return is_f ? -((int)result) : (int)result;
    44 }

      上面代码我将出错的代码保存在myError全局变量中,因为如果用返回值来表示出错,这个会与字符串代表的整数值产生混淆。上面的代码自己测试了下貌似对应上面写得各种情况都正确,不过写得代码质量不高,贴出来仅供分享,也许还有没有考虑的情况。

  • 相关阅读:
    GridView固定表头
    图片自动适应大小
    GridView实现用"..."代替超长字符串
    使用纯 CSS 设计3D按钮
    Net下二进制形式的文件(图片)的存储与读取
    repeater创建复杂的表头
    GridView加入自动求和求平均值小计
    CSS+DIV(盒子)
    DIV 在 IE 与 FF 下的设置
    gridView分页
  • 原文地址:https://www.cnblogs.com/chengxuyuancc/p/3570052.html
Copyright © 2011-2022 走看看