LeetCode 之 String to Interger
这一道题比较简单,需要注意的事项如下:
1、字符串前面的空格需要去掉;
2、数字前面的正负号需要标识出来;
3、形如 :” -123ac“, 取前面的数字:-123;
4、形如: ” - ab123”, 为错误形式,数字之前只能出现若干个空格,以及一个相连的正负号;
5、需要考虑到输入超出了Int可表示的有效范围(溢出)时,输出为相应最大值(正数),或者最小值(负数)
代码如下:
int myAtoi(char *str)
{
int i;
long long int strToInt = 0; //!< long long int足够大,保存输入的值
char symbol = 0;
//!< 若str为空,则返回
if (str == NULL)
{
printf("The pointer is NULL\n");
return 0;
}
//!< 去除前面的空格
i = 0;
while (str[i] == ' ')
++i;
//!< 保存正负号
if ( (str[i] == '-') || (str[i] == '+') )
{
symbol = str[i];
++i;
}
//!< 若字符串除空格和一个正负号之外的第一个字符不是数字,则报错
while (str[i] < '0' || str[i] > '9')
{
printf("It's not number\n");
return 0;
}
//!< 读取数字,并判断是否溢出int类型的有效范围
while (str[i] >= '0' && str[i] <= '9')
{
strToInt = 10*strToInt + str[i] - '0';
if (strToInt >= 2147483648)
{
if (symbol == '-')
{
return -2147483648;
}
else
{
return 2147483647;
}
}
++i;
}
return strToInt = symbol == '-' ? -strToInt: strToInt;
}