#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;
}
C#atoi函数模拟
最新推荐文章于 2024-07-13 08:52:13 发布