#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
#include <limits.h>
//atoi函数功能是将数字字符串转换为整数;比如数字字符串"12345"被atoi转换为12345, 数字字符串"-12345"被转换为 - 12345。
//考虑问题
//1.空指针
//2.空字符串
//3.字符串中的空格
//4.非数字字符
//5.溢出问题(所得数字大于INT_MAX或者小于INT_MIN)
//6.正负号问题
//int my_atoi(const char* arr)
//{
// assert(arr);
// int n = 0;
// while (*arr != '\0')
// {
// n = (n * 10) + (*arr - '0');
// arr++;
// }
// return n;
//}
enum Status
{
VALID,
INVALID
}status = INVALID;
int my_atoi(const char* arr)
{
//1.空指针
assert(arr);
int flag = 1;//'+' - 1 '-' - -1
//2.空字符串
if (*arr == '\0')
{
return 0;
}
//处理空白字符
while (isspace(*arr))
{
arr++;
}
//正负号问题
if (*arr == '+')
{
flag = 1;
arr++;
}
else if (*arr == '-')
{
flag = -1;
arr++;
}
long long n = 0;
while (*arr != '\0')
{
if (isdigit(*arr))//isdigit判断是否是数字字符
{
n = n * 10 + flag * (*arr - '0');
if (n < INT_MIN )
{
n = 0;
break;
}
else if (n > INT_MAX)
{
n = INT_MAX;
break;
}
arr++;
}
else
{
break;
}
}
if (*arr == '\0')
{
status = VALID;
}
return (int)n;
}
int main()
{
char arr[] = " -12345";
int ret = my_atoi(arr);
if(status == VALID)
printf("正常转化:%d\n", ret);
else
printf("非法转化:%d\n", ret);
return 0;
}
02-10
1014
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-19
4万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
03-17
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-14
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交