atoi
功能:转化字符串到整数
头文件: #include <stdlib.h>
int atoi (const char * str);
参数 str:要转换为整数的字符串
返回值
如果转换成功,函数将转换后的整数作为int值返回 , 如果没有执行有效的转换,则返回零。
注意事项
字符串只能转换数字,如字符串包含了数字以外的,则提前返回非数字前的字串
使用方法:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char arr[] = "123";
int ret = atoi(arr);
if (ret == 0)
{
printf("转换失败\n");
}
else
{
printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2);
}
system("pause");
return 0;
}
最终输出结果为:
整型值 = 123
整型值乘2= 246
atoi模拟实现
注意事项:
- 判断atoi传过来的参数是否为空指针
- 判断首字符是否为空格,如有空格将跳过
- 判断字符串是否为空
- 判断字串正负
- 判断是否为数字,如是非数字提前返回非数字前的字串
- 考虑字串是否为溢出的问题 (大于int或小于int)
- 判断字串是否非法转换(用一个枚举来判断,起始把字符串判定为非法转换,如转换成功在判定成 成功转换)
#include <ctype.h>
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
enum S
{
Value,
ErrValue //代表非法转换
};
S = ErrValue;
int my_atoi(char* arr)
{
//1:判断是否为空指针
assert(arr);
//2:判断是否为空格
while (*arr == ' ')
{
arr++;
}
//判断字符串是否为空
if (*arr == '\0')
return 0;
//判断正负 flag 为1是正 -1是付
int flag = 1;
if (*arr == '-')
{
flag = -1;
arr++;
}
//首字符是否为数字 如果不是数字 就返回0
if (!isdigit(*arr))
return 0;
//使用long long可以接受更长的长度
long long n = 0;
while (*arr != '\0')
{
//判断是否为数字
//isdigit判断是否为十进制0-9的数字 头文件#include <ctype.h>
if (isdigit(*arr))
{
n = n * 10 + (*arr - '0');
//考虑是否为溢出的问题
if (n > INT_MAX)
{
n = INT_MAX;
break;
}
else if (n < INT_MIN)
{
n = INT_MIN;
break;
}
}
//如果是非数字就退出并返回
else
{
return (int)n;
}
arr++;
}
//flag决定 N是否为正
n *= flag;
//成功转换
if (*arr == '\0')
{
S = Value;
//返回值是int类型所以强制类型转换一下
return (int)n;
}
//非法转换
return (int)n;
}
int main()
{
char arr[] = "123";
int ret = my_atoi(arr);
if (S == Value)
{
printf("成功转换\n");
printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2);
}
else
{
printf("非法转换\n");
printf("整型值值= %d\n整型值乘2= %d\n", ret, ret * 2);
}
system("pause");
return 0;
}