题目:编写程序实现字符串到整数的转换,如输入字符串“12345”,输出整数12345;即实现 atoi();
实现注意事项:此题考查的是考虑问题的全面性,在实现atoi()函数时应注意以下五点:
(1)指针为NULL;
(2)空字符串 '\0';
(3)+、- 号的处理;
(4)溢出问题;
(5)遇到异常字符怎么办;
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
#include <limits.h>
enum RET
{
VALID,INVALID
};
enum RET state = VALID;
int my_atoi(const char* str)
{
assert(str);
int flag = 1;
long long ret = 0;
if (str == NULL) //指针为NULL
{
return 0;
}
if (*str == '\0') //空字符串
{
return 0;
}
while (isspace(*str))//空白字符处理
{
str++;
}
if (*str == '-') //+ -号处理
{
flag = -1;
}
if ((*str == '+') || (*str == '-'))
{
str++;
}
while (*str)
{
if ((*str >= '0') &&(*str <= '9'))
{
ret = ret * 10 + flag*(*str - '0');
if ((ret>INT_MAX) || (ret < INT_MIN)) //处理溢出
{
printf("数值越界\n");
return 0;
}
}
else
{
state = INVALID; //处理异常字符
return ret;
}
str++;
}
return ret;
}
int main()
{
char arr[20];
scanf("%s", arr);
int ret = my_atoi(arr);
if (state == VALID)
{
printf("%d\n", ret);
}
else
{
printf("输入值非法\n");
printf("%d\n", ret);
}
system("pause");
return 0;
}
转载于:https://blog.51cto.com/10742272/1769532