实现一个 myAtoi(char *s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。算法如下:
注意:
本题中的空白字符只包括空格字符 ' ' 。
除前导空格或数字后的其余字符串外,请勿忽略任何其他字符。
我的解答
int myAtoi
(
const char *s
)
{
int c;
int cutlim;
unsigned int acc;
int valid = 1;
int neg = 0;
do
{
c = *s++;
} while(c == ' ');
if(c == '-')
{
neg = 1;
c = *s++;
}
else if(c == '+')
{
c = *s++;
}
cutlim = neg? 8 : 7;
while(c == '0')
{
c = *s++;
}
for(acc = 0; (c >= '0') && (c <= '9'); c = *s++)
{
c -= '0';
if((acc > (__INT_MAX__/10)) || ((acc == (__INT_MAX__/10)) && (c > cutlim)))
{
valid = 0;
break;
}
else
{
acc = acc*10+c;
}
}
return valid? (neg? -acc : acc) : (neg? (-__INT_MAX__-1) : __INT_MAX__);
}
本地测试
官网测试
注意事项
我是泰山 专注VX好多年!
一起学习 共同进步!