把字符串转换成整数(atoi)
Last updated
Last updated
问题简述
写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。传入的字符串可能有以下部分组成:
1.若干空格
2.(可选)一个符号字符('+' 或 '-')
3. 数字,字母,符号,空格组成的字符串表达式
4. 若干空格
思路
设定一个指针逐字符处理;
class Solution:
def StrToInt(self , s: str) -> int:
N = len(s)
if N <= 0: return 0
p = 0
sign = 1
# 注意越界判断
# 跳过空格
while p < N and s[p] == ' ': p += 1
if p < N and s[p] == '-': sign = -1
if p < N and s[p] in ('-', '+'): p += 1
flag = False
ret = 0
while p < N and '0' <= s[p] <= '9':
ret = ret * 10 + int(s[p])
if ret >= 2 ** 31: # python 没有越界,人工判断
flag = True
break
p += 1
if flag:
return 2 ** 31 - 1 if sign == 1 else -2 ** 31
return ret * sign
class Solution {
public:
int StrToInt(string str) {
// write code here
int n = str.length();
if (n < 1) return 0;
int p = 0; // 模拟指针
int sign = 1; // 正负
// C++ 字符串不需要越界判断
while (isspace(str[p])) p++; // 跳过前置空格
if (str[p] == '-') sign = -1;
if (str[p] == '-' || str[p] == '+') p++;
int ret = 0;
while (str[p] >= '0' && str[p] <= '9') {
int new_ret = ret * 10 + str[p] - '0';
if (new_ret / 10 != ret) { // 越界判断
return sign > 0? INT_MAX : INT_MIN;
}
ret = new_ret;
p++;
}
return sign * ret;
}
};