美文网首页
leetcode第8题:字符串转换整数(atoi)

leetcode第8题:字符串转换整数(atoi)

作者: nlpming | 来源:发表于2020-06-25 11:13 被阅读0次
题目描述

请你来实现一个 atoi 函数,使其能将字符串转换成整数。
提示:

  • 在任何情况下,若函数不能进行有效的转换时,请返回 0 。
  • 本题中的空白字符只包括空格字符 ' ' 。
  • 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
输入: "42"
输出: 42

示例 2:
输入: "   -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
     我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例 3:
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

示例 4:
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
     因此无法执行有效的转换。
考点
  • 数学
  • 字符串
解题思路
  • 首先,去除字符前面的空格字符;
  • 然后,对运算符(-, +)做特殊处理;
  • 最后,计算结果;注意对"4193 with words"这种例子的处理;
代码实现
  • 注意整形溢出的处理,res初始化为double类型;
class Solution {
private:
    bool isOperator(char ch){
        if(ch == '+' || ch == '-')
            return true;
        else
            return false;
    }
public:
    int myAtoi(string str) {
        double res = 0;
        bool flag = true;

        // 去除空格
        int i = 0;
        for(; i < str.length(); i++){
            if(str[i] == ' ') 
                continue;
            else
                break;
        }
        str = str.substr(i, str.length()-i);
        //cout << str << endl;

        // 开始计算结果
        for(int i = 0; i < str.length(); i++){
            if(i == 0 && !isdigit(str[i]) && !isOperator(str[i])) // 非数字和运算符开头
                return 0;
            else if(i == 0 && str[i] == '-')
                flag = false;
            else if(i == 0 && str[i] == '+')
                flag = true;
            else if(i == 1 && isOperator(str[i]) && isOperator(str[i-1]))
                return 0;
            else{
                if(isdigit(str[i]))
                    res = res*10 + (str[i] - '0');
                else
                    break;
            }
        }

        if(!flag) res = -res;
        if(res > INT_MAX) return INT_MAX;
        if(res < INT_MIN) return INT_MIN;

        return res;
    }
};

相关文章

网友评论

      本文标题:leetcode第8题:字符串转换整数(atoi)

      本文链接:https://www.haomeiwen.com/subject/sicsfktx.html