Atoi函数C语言实现

2016-12-02 12:52:56来源:网络收集作者:路过秋天人点击

第七城市
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{
if (isspace(str[i])) //delete space table
{
continue;
}
else
{
break;
}
}
//lenStr = lenStr - i;
for (; i{
if (str[i] == '-')//read +or digit
{
if (i + 1 {
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 {
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{
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;
}
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台