前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)

Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)

作者头像
racaljk
发布2018-10-10 10:43:02
6230
发布2018-10-10 10:43:02
举报
文章被收录于专栏:racaljkracaljkracaljk

Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)

题目描述

实现atoi函数,将一个字符串转化为数字

测试样例

Input: "42"
Output: 42

Input: "   -42"
Output: -42

Input: "4193 with words"
Output: 4193

Input: "words and 987"
Output: 0

详细分析

这道题的corner cases非常多,请务必确保下面cases都能通过的情况下再提交。

"42"
"words and 987"
"-91283472332"
"0-1"
"-000000000000001"
"  0000000000012345678"
"10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000522545459"
"-2147483647"
"-2147483648"
"2147483648"
"2147483649"
""
"7"
"   +0 123"

算法实现

class Solution {
public: 
    string trim(const std::string&str){
        string nstr;
        int i=0;
        while(isspace(str[i])){
            i++;
        }
        
        for(;i<str.length();i++){
            if(isspace(str[i])){
                break;
            }
            nstr +=str[i];
        }
        return nstr;
    }
    
    int myAtoi(string str) {
        str = trim(str);
        if(str.length()==0 || (str[0]!='+'&&str[0]!='-'&& !isdigit(str[0]))){
            return 0;
        }
        
        int i=0;
        
        //consume sign char
        if(str[0] =='+' || str[0]=='-'){
            i++;
        }
        string nstr;
        while(isdigit(str[i])){
            nstr+=str[i];
            i++;
        }
        if(nstr.length()==0){
            return 0;
        }
        i=0;
        // consume meaningless zeros
        while(nstr[i]=='0'){
            i++;
        }
        nstr = nstr.substr(i);
        long long result = 0L;
        unsigned long long exp = 1; 
        for(int k=nstr.length()-1;k>=0;k--){
            result += ((int)(nstr[k]-'0'))*exp;
            
            if(exp> numeric_limits<int>::max()){
                return str[0]=='-'?numeric_limits<int>::min():numeric_limits<int>::max();
            }
            exp*=10;
            if(result> numeric_limits<int>::max()){
                return str[0]=='-'?numeric_limits<int>::min():numeric_limits<int>::max();
            }
        }
        return str[0]=='-'?-result:result;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)
    • 题目描述
      • 测试样例
        • 详细分析
          • 算法实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档