8. String to Integer (atoi)字符串转换

实现atoi将字符串转换为整数。
提示:仔细考虑所有可能的输入案例。如果你想挑战,请不要在下面看到,问问自己可能输入的情况是什么。
注意:它是为这个问题指定模糊的(即,没有给定的输入规格)。你有责任把所有的输入需求收集到前面。

【别人的总结】

照着要求写代码,可以总结如下:

  1. 字串为空或者全是空格,返回0;
  2. 字串的前缀空格需要忽略掉;
  3. 忽略掉前缀空格后,遇到的第一个字符,如果是‘+’或‘-’号,继续往后读;如果是数字,则开始处理数字;如果不是前面的2种,返回0;
  4. 处理数字的过程中,如果之后的字符非数字,就停止转换,返回当前值;
  5. 在上述处理过程中,如果转换出的值超出了int型的范围,就返回int的最大值或最小值。
class Solution {
public:
int myAtoi(string str) {
    long long result = 0;
    int flag = 1;//负号标志
    size_t i = 0,len = str.size();
    //跳过空白
    while (str[i] == ' '){ ++i; }
    //查看 + - 
    if (str[i] == '-' || str[i] == '+'){
        flag = (str[i++] == '+') ? 1 : -1;
    }
    while (str[i] <= '9' && str[i] >= '0')
    {
        //每个字符都是以ascii码读取,所有需要减去0的ascii值:48
        result = result * 10 +(str[i++]-'0');
        if (result >= INT_MAX&&flag ==1){
            return INT_MAX;
        }
        else if (-result <= INT_MIN&&flag == -1)
        {
            return INT_MIN;
        }
    }
    return result*flag;
}
};

【别人家的代码】

class Solution {
public:
    int myAtoi(string str) {
        long long res = 0; // string could be greater than  max long long ;
        int i = 0;
        bool sign = true;
        
        // 1) step trim out whitespace;
        while (str[i] == ' ' && i < str.length()) {
            i++;
        }
        
        // 2) deal with sign;
        if (str[i] == '+' || str[i] == '-') {
            sign = (str[i] == '+') ? true : false;
            i++;
        }
        
        // 3) compute value;
        while (i < str.length()) {    
            //compute current value;
            if (str[i] >= '0' && str[i] <= '9') {
                res = res*10 + str[i]- '0'; 
                if (res - INT_MAX >= 1) { //overflow;
                    break;
                }
                i++;
            } else {
                break;
            }
            
        }
        
        if (res - INT_MAX >= 1) {
            if (sign) {
                return INT_MAX;
            }
            return INT_MIN;
        }
        
        res = sign ? res : (-1)*res;
        return res;
    }
    
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 一、字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 s...
    JaiUnChat阅读 1,676评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 星稀夜静月光明,寒意惊风梦又醒。思绪如棉临窗默,望穿青史映今生。四年十月如梭过,犹忆滴滴兄弟情。万物皆市不足贵,千...
    云梦飞阅读 253评论 0 4
  • 异类关于本书和作者格拉德威尔的代表作之一,带领我们找到了成功的根源,发现了更深刻的成功契机,也为社会变革带来新的启...
    龙少侠linux阅读 310评论 0 2