atoi是将字符串转换为长整形数的一种函数,itoa相反
atoi实现需注意一下点:
1,空格;
2,表示数值的正负号;
3,结束条件:非数字或‘\0’;
4,考虑溢出问题;
5,考虑异常输入问题(+abc …),用全局变量valid标识;
#define INT_MAX ((int)0x7FFFFFFF)
#define INT_MIN ((int)0x80000000)
bool valid = true; //标识异常
int atoi(const char* str)
{
if(str == NULL) return 0;
bool minus = false; //标识正负
long long result = 0;
while(*str == ' ') str++;
if(*str == '-')
{
minus = true;
str++;
}
else if(*str == '+')
str++;
if(*str < '0' || *str > '9') return 0;
valid = true;
while(*str >= '0' && *str <= '9')
{
result = result*10 + *str-'0';
if((minus && result > INT_MAX) || (!minus && result < INT_MIN))
{
valid = false;
return 0;
}
str++;
}
if(minus)
result*= -1;
return (int)result;
}
char* Reverse(char* str)
{
char* begin = str;
char* end = str;
char* ret = begin;
while (*end)
end++;
end--;
while (begin < end)
{
char tmp = *begin;
*begin = *end;
*end = tmp;
begin++;
end--;
}
return ret;
}
char* my_itoa(int x)
{
if (x == 0) return NULL;
static char str[100];
int isnegtive = 0; //标注正负
if (x < 0)
{
isnegtive = 1;
x = -x;
}
int i = 0;
while (x)
{
str[i++] = x % 10 + '0';
x = x / 10;
}
if (isnegtive == 1)
str[i++] = '-';
str[i] = '\0';
return Reverse(str);
}
本文探讨了将字符串转换为长整型数的atoi函数及其逆过程itoa函数。重点指出在实现atoi时应注意空格、符号、结束条件、溢出问题以及异常输入的处理,通过一个全局变量valid来标记输入的有效性。
952

被折叠的 条评论
为什么被折叠?



