atoi()函数的实现
atoi()原型: int atoi(const char *str );
函数功能: 把字符串转换成整型数。
参数str: 要进行转换成int 类型的字符串
返回值: 每个函数返回 int 值,此值由将输入字符作为数字解析而生成。 如果该输入无法转换为该类型的值,则atoi的返回值为 0。
注意:使用该函数时要注意atoi返回的是int类型,注意输入str的范围不要超出int类型的范围。
实现atoi()函数开始之前,发现库中提供的atoi函数可以处理许多异常,下面就是库中可以处理的异常:
1.指针为NULL和空字符
2.( + , - )号处理
3.遇到异常字符(空格,制表符等)时的处理方
4.溢出时处理,分为两部分:
1).上溢出,输出上界
2).下溢出,输出下界
那么对这些异常进行处理就可以完成一个简单atoi()函数了。
简单代码演示
#include <stdio.h>
#include <stdlib.h>
int main(){
char str1[] = "100";
char str2[] = "-100";
int result1 = atoi(str1);
int result2 = atoi(str2);
printf("result1=%d\n",result1);
printf("result2=%d\n", result2);
system("pause");
return 0;
}
运行结果:
模拟实现atoi(没有对溢出进行处理)
#include <stdio.h>
#include <stdlib.h>
int MyAtoi(const char* str){
int flag = 1;
int ret = 0;
//1.str == NULL 判定字符是不是空指针 *str == '\0'判定字符是不是空字符
if (str == NULL && *str == '\0'){
return 0;
}
//2.处理空白字符
if (isspace(*str)){
str++;
}
//3.判定负数
if (*str == '-'){
flag = -1;
str++;
}
//3.判定正数数
if (*str == '+'){
str++;
}
//4.处理正常的数字字符串
while (*str != '\0'){
if (isdigit(*str)){
//核心操作:能把数字转为int类型
ret = ret * 10 + (*str - '0');
}
else{
return ret;
}
str++;
}
return ret*flag;
}
int main(){
char str[] = "1241,a";
int result = MyAtoi(str);
printf("result=%d\n", result);
system("pause");
return 0;
}
运行结果: