字符串转换整数 (atoi)
题目描述
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。返回整数作为最终结果。注意:本题中的空白字符只包括空格字符 ’ ’ 。除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。
示例 1:
- 输入:s = “42”
- 输出:42
示例 2:
- 输入:s = " -42"
- 输出:-42
示例 3:
- 输入:s = “4193 with words”
- 输出:4193
示例 4:
- 输入:s = “words and 987”
- 输出:0
示例 5:
- 输入:s = “-91283472332”
- 输出:-2147483648
题目来源
题目解析
- 头部可以有很多个空格
- 第一个字符如果是特殊符号,必须是 + 或 -
- 如果出现了其他字母,程序终止
- 当数字超出 int 范围时,不再进行处理
int myAtoi(String s) {
// 1.去字符串前面的空格
s = s.trim();
// 2.遍历字符串 "9223372036854775808"
char[] charArray = s.toCharArray();
if (charArray.length == 0){
return 0;
}
long result = 0;
boolean minus = false;
if (charArray[0] == '-') {
minus = true;
}
// 【当数字超过Long范围的时候会有转换异常,所以当数字大小超过int的时候就进行输出】
for (int i = 0; i < charArray.length; i++) {
char c = charArray[i];
if (c <= '9' && c >= '0'){
result = result * 10 + c - '0';
if(result >= 2147483647){
if (!minus){
return 2147483647;
}else if (result >= 2147483648L) {
return -2147483648;
}
}
} else if (i == 0 && (c == '+' || c == '-')){
continue;
} else {
break;
}
}
if (minus) {
result *= -1;
}
return (int) result;
}