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

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;
    }
};

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

python高级特性:切片/迭代/列表生成式/生成器

20430
来自专栏mathor

LeetCode75.颜色分类

 这道题两种做法,一种是用计数排序,因为告诉了你只有3种数字,所以直接创建一个长度为3的数组arr,然后遍历一遍原数组,每出现一次某个数,arr对应位置的值...

7120
来自专栏Golang语言社区

map按key和按value排序

看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70...

38230
来自专栏前端儿

字符串替换

每行数据是一个字符串,长度不超过1000  数据以EOF结束输出对于输入的每一行,输出替换后的字符串样例输入

20720
来自专栏云霄雨霁

排序----选择排序

16900
来自专栏逆向技术

逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值.

      逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值. 在反汇编中,我们常常的会看到各种的函数调用,或者通过逆向的手段,单独的使用这个函数,那么...

27090
来自专栏yl 成长笔记

UML 类图基础

定义:两个类之间的强依赖关系, 可以为单向,亦可为双向。常见表现形式 为 A 类中有 B 类型的成员变量。

11740
来自专栏Golang语言社区

map按key和按value排序

看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70...

56280
来自专栏Fish

CUDA PTX ISA阅读笔记(一)

不知道这是个啥的看这里:Parallel Thread Execution ISA Version 5.0. 简要来说,PTX就是.cu代码编译出来的一种东西...

37250
来自专栏烂笔头

Python正则表达式:最短匹配

目录[-] 最短匹配应用于:假如有一段文本,你只想匹配最短的可能,而不是最长。 例子 比如有一段html片段,<a>this is first label<...

43970

扫码关注云+社区

领取腾讯云代金券