前言
位置:
atoi函数包含在<stdlib.h>头文件中
作用:
将字符串转换为整形数据返回。
函数原型:
int atoi(const char* str);
一、atoi函数测试
1. 要求
1.数字出现之前:
①只能出现空格、或者+、-号,否则返回0
②正负号可没有,并且最多可以出现一次,否则返回0
③可以出现任意数量的空格
2.数字出现之后:
①遇到任何非数字字符皆退出
②数字的大小需要在int之内,大于INT_MAX就返回INT_MAX,小于INT_MIN就返回INT_MIN
2. 测试
举个栗子:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[200];
while (fgets(str,200,stdin) != NULL)
{
printf("%d\n\n", atoi(str));
}
return 0;
}
运行示例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/d7c0e06188d54b6ab0960bfe2fefcb8e.png)
二、atoi函数模拟实现
模拟实现:
#include<stdio.h>
int my_atoi(const char* str)
{
assert(str);
int cmp = 0;//记录空格类字符的出现次数
int d = 0;//记录正负号
long long num = 0;
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == ' ' || isdigit(str[i]) || str[i] == '+' || str[i] == '-')//只有 空格、数字、正负号 可以进来
{
if (isdigit(str[i]))
{
cmp = 1;
num = num * 10 + str[i] - '0';
if (num > INT_MAX)
break;
}
else
if (cmp != 1)//空格和正负号只能在数字前面出现,并且正负号只可以出现一次
{
if (str[i] == '+' || str[i] == '-')
{
cmp = 1;
if (str[i] == '-')
d = -1;
}
}
else
break;
}
else
break;
}
if (d == -1)
{
if (-num < INT_MIN)
return INT_MIN;
else
return -num;
}
else
{
if (num > INT_MAX)
return INT_MAX;
else
return num;
}
}
int main()
{
while (1)
{
char str[100] = { 0 };
gets(str);
int i = my_atoi(str);
printf("%d\n\n", i);
}
return 0;
}
运行实例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/43a96e0f1ee14d9b891e53ea6f02cd34.png)
三、补充
C语言提供了一系列将字符串转换为数字的函数,如:atoi、atol、atof、strtod,
这些函数都包含于头文件<stdlib.h>中;
作用:
atoi:将字符串转换为整形输出
atol:将字符串转换为长整型数据,
atof:将字符串转换为double类型数据,
strtod:将字符串转换为double类型数据。
函数原型:
int atoi(const char* str);
long int atol(const char* str);
double atof(const char* str);
double strtod(const char* str, char** endptr);
strtod函数可以通过endptr指针记录下本次转换结束的位置,如果下次想要录入字符串后面的数据可以使用它。