校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 算法 > 字符串算法
题目

字符串转为整数 (parseInt的实现),比如”+0123”转换为123 

解答

思路:

核心思路比较简单:

从字符串的左边往右逐一计算,前面的数a*10+ 当前位的值b
那考查点在哪?

考察细节:

1. 字符串为空;

2. 首字符为’+’ , ‘-’ ;

3. 字符串为’+’ , ‘-’;

4. 字符串开始为’ ’;

5. 数字转换过程中,超过int最大值;

6. 注意字符’9’ 不等于数字9 ,需要’9’ – ‘0’;

核心代码
int parseInt( const char[] str)
{
if(str.length ==0 )//错误情况
return 0; (throw exception)
//考虑空格
int i = 0;
while( str[i] == ‘ ‘ )
++i;
//判断正负
int sign = 1;
if(str[i] == ‘-’)
{
sign = -1;
++ i;
}else if( str[i] == ‘+’)
{
++i;
}
long num = 0; //注意为long
while( i < str.length)
{
if( str[i] >= ‘0’ && str[9] <= ‘9’)
{
num = num * 10 + (*str – ‘0’);
if (num > 0x7FFFFFFF) {
throw exception;
}
++i;
}else
{
throw exception;
}
}
return num * sign;
}



C 4条回复 评论
雾岛残月

这是我一直没记住的一个重点

发表于 2022-04-29 23:00:00
0 0
星星打烊

跟着大佬输出,感觉能量满满

发表于 2022-03-08 23:00:00
0 0
假期

代码assica码

发表于 2021-03-17 23:17:16
0 0
飞鸟

public class ParseInt {
public static int string2Int(String s){
assert(s.length() >11) ;
long num = 0;
int flag= 1;
char[] ch = s.toCharArray();
for (int i = 0; i < s.length(); i++) {
// 符号检查
if(ch[i] == '-'){
flag = -1;
}else {
if(ch[i]!='+')
num = num*10+(ch[i]-'0');
}

}
num = flag * num;
return (int) num;
}

发表于 2021-03-17 10:57:27
0 0