解答
思路:
核心思路比较简单:
从字符串的左边往右逐一计算,前面的数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;
}
这是我一直没记住的一个重点
跟着大佬输出,感觉能量满满
代码assica码
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;
}