LeetCode8 String to Integer (atoi)

文章目录
  1. 1. 描述
  2. 2. 样例
  3. 3. 思路
  4. 4. 代码

描述

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

样例

1
2
Input: 
"123"
1
2
Output: 
123

思路

实现$atoi$函数,这是一个将字符串转成$int$的函数。

这题坑爹的是要考虑所有可能的输入情况,然后又不给你样例…(#‵ ′)凸

自认为考虑周到了,符号啊,溢出啊,非法字符啊都考虑了,但是提交却WA了几遍…

第一次WA在输入可能有前导空白,比如 " 123" 。。第二次WA在正数的符号处理,比如像+1 (orz…只处理了’-‘的情况,没想到正数前面也可能加个’+’)。。

总的来说,$atoi$函数处理的方式应该是,先忽略前导空白符,再判断是否有+-符号,然后处理到第一个非法字符(不是0-9)为止。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int myAtoi(string str) {
int l, r, sign = 1, n = str.size();
for (l = 0; l < n && isspace(str[l]); ++l); // 处理空白符
if (l < n && str[l] == '-') sign = -1, ++l; // 处理符号
else if (l < n && str[l] == '+') sign = 1, ++l;
for (r = l; r < n && isdigit(str[r]); ++r); // 找到第一个非法字符
str = str.substr(l, r - l); // 合法数字的子串
long long num = 0;
for (char& c: str) {
num = num * 10 + c - '0';
if (sign * num > INT_MAX) return INT_MAX;
if (sign * num < INT_MIN) return INT_MIN;
}
return sign * num;
}
};
分享到 评论