zoukankan      html  css  js  c++  java
  • 剑指offer 67. 字符串转换为整数(Leetcode 8. String to Integer (atoi))

    题目:剑指offer 67题

    需要考虑的情况:空指针、nullptr、空字符串""、正负号、数值溢出。在写代码的时候对这些特殊的输入都定义好合理的输出。
    可以定义一个全局布尔型变量g_nStatus来判断是否是错误输入;可以定义一个minus布尔型变量来存储正负号的结果。

    enum Status { kValid = 0, kInvalid };  // enum特性,默认kInvalid = 1
    int g_nStatus = kValid;
    
    long long StrToIntCore(const char* digit, bool minus) {
        long long num = 0;  // 64位整型
        while (*digit != '') {
            if (*digit >= '0' && *digit <= '9') {
                int flag = minus ? -1 : 1;
                num = num * 10 + flag * (*digit - '0');
    
                // 32位整数是否溢出,0x7FFFFFFF和0x80000000分别代表32位的最大正整数和最小负整数
                if ((!minus && num > 0x7FFFFFFF) || (minus && num < (signed int)0x80000000)) { 
                    num = 0;
                    break;
                }
                digit++;
            }
            else {
                num = 0;
                break;
            }
        }
        if (*digit == '') {
            g_nStatus = kValid;
        }
        return num;
    }
    
    int StrToInt(const char* str) {
        g_nStatus = kInvalid;
        long long num = 0;
        if (str != nullptr && *str != '') {
            bool minus = false;
            if (*str == '+')
                str++;
            else if (*str == '-') {
                str++;
                minus = true;
            }
    
            if (*str != '') {
                num = StrToIntCore(str, minus);
            }
        }
    }

    总结:

    在剑指offer中,明确提出,在写代码前考虑所有可能的测试用例,是非常好的一个编程习惯。在思考问题的过程中,把问题考虑得尽可能周到,代码尽量完整。如果让面试官指出你代码中存在的问题,此时印象分已经大打折扣,即使你反应再快,在他们眼里bug也是出现了。

  • 相关阅读:
    《the art of software testing》 第三章 人工测试
    unbutu下wireshark编译安装(已更新)
    Cygwin工具的简单使用
    第三周Linux编程实例练习
    ceph如何快速卸载所有osd及擦除磁盘分区表和内容并重新加入
    Redis集群的分布式部署
    redis主从同步
    redis编译安装
    kubeadm部署k8s
    openstack高可用集群19-linuxbridge结合vxlan
  • 原文地址:https://www.cnblogs.com/Flash-ylf/p/11497389.html
Copyright © 2011-2022 走看看