一.atoi函数介绍
简单来讲,就是将一个字符串中的数字字符变为整数。
二.一些特殊点
1.字符串内含有字母
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[]="123412";
int ret=atoi(a);
printf("%d",ret);
return 0;
}
例如一个字符串ch="a1234",那么atoi第一次检索时没有直接遇到数字,而是遇到了字母,那么就会返回0,如图。
2.字符串内含有空格
atoi会跳过前面的空格,直至检索到数字。如果该字符串全部都是空格,那么就会返回0。
如果字符串数字和数字之间存在空格,那么不会继续检索。
3.字符串内含有正负号
atoi会自动识别正负号,并在输出的数字前面加上正负号。
但如果是在数字之后的正负号,那么就会与数字后遇到字母,空格同理,停止继续检索。
三.atoi函数模拟实现
在编写时,我们需要注意以下几点:1,开头遇到空格应往后继续跳过,直到遇到数字;2,如果碰到字母应直接返回0;3,应检查atoi转换后的数字是否还在int表示范围内。
代码如下
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<limits.h>
int myatoi(char* p)
{
if (*p == '\0')//判断是否为空指针
{
return 0;
}
while (isspace(*p))
{
p++;
}//判断空格
int flag = 1;
long m = 0;
if (*p == '+')
{
flag = 1;
p++;
}
else if (*p == '-')
{
flag = -1;
p++;
}//判断正负号
while (*p != '\0')
{
if (*p >= '0' &&*p <= '9')
{
m = m * 10 + flag * (*p - '0');
}//对数据进行转换
else
{
break; //你不是数字是不是就要break,离开循环
}
if (m< INT_MIN || m > INT_MAX)//判断是否超出int表示范围
break;
p++;
}
return m;
}
int main()
{
char a[1000];
fgets(a, 1000, stdin);//输入字符串
int len = strlen(a);
a[len - 1] = '\0';//计算字符串长度并在末尾加上斜杠0,因为我在这里是以字符数组的方式定义的
int m = myatoi(a);
printf("%d", m);
return 0;
}