Atoi函数实现
这段时间在学习算法,发现以前学过的并且熟悉的知识,不用便很快忘记了,在leetcode上遇到了一个Atoi转换函数的实现,初看只是字符串转整型,但是实际上需要考虑很多边界情况。
- 空格(tab、空格)需跳过直到遇到+,-,数字
- atoi解析+,-后的数字字符,一直到非数字字符停止
- 若遇到非+,-,数字的开始,返回0
- 边界值 int :2147483647 -2147483648 这里出错最多,没有考虑整型返回,需采用更大返回数值 保存计算结果
- 第一次用Markdown 感觉不错
atoi实现
int myAtoi(char* str) {
int lenStr = 0;
int i = 0;
long long totalValue = 0;
int negative = 1;
char realValue[20];
if (str == NULL)
{
return 0;
}
lenStr = strlen(str);
for (i = 0; i<lenStr; i++)
{
if (isspace(str[i])) //delete space table
{
continue;
}
else
{
break;
}
}
//lenStr = lenStr - i;
for (; i<lenStr; i++)
{
if (str[i] == '-') //read + or digit
{
if (i + 1<lenStr)
{
if (str[i + 1] >= '0' &&str[i + 1] <= '9')
{
negative = -1;
i = i + 1;
}
else
return 0;
}
else
{
return 0;
}
break;
}
else if (str[i] == '+')
{
if (i + 1<lenStr)
{
if (str[i + 1] >= '0' &&str[i + 1] <= '9')
{
negative = 1;
i = i + 1;
}
else
return 0;
}
else
{
return 0;
}
break;
}
else if (str[i] >= '0' &&str[i] <= '9')
{
negative = 1;
break;
}
else
{
return 0;
}
}
for (; i<lenStr; i++) //read digit must care the limit of int 2^^31-1 2^^31
{
if (str[i] >= '0'&&str[i] <= '9')
{
totalValue = totalValue * 10 + (str[i] - '0');
if (totalValue>2147483647)
{
return negative<0 ? negative*2147483648 : 2147483647;
}
}
else
break;
}
/*
if(negative ==1 && (totalValue>2147483647||lenStr>10))
{
return 2147483647;
}
else if(negative ==-1 && (totalValue>2147483648||lenStr>10))
{
return -2147483648;
}
*/
return negative*(int)totalValue;
}