文章目录
模拟实现atoi函数
atoi函数是干啥的?
~数字字符串转换为整数
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<limits.h>//INT_MAX的头文件
enum state{
FEIFA,
HEFA
};
enum state st = FEIFA;//定义全局的枚举变量
//,非法的情况多所以把他置为非法的
int my_atoi(const char* s){
int flag = 0;
//空指针
if (NULL == s){
return 0;
}
//空字符串
if (*s == '\0'){
return 0;
}
//跳过空白字符
while (isspace(*s)){
//这个函数是判断是不是空字符的是返回非零值
s++;
}//while结束说明空字符已经跳过去了
//判断+/— 号
if (*s == '-'){
flag = -1;
s++;
}
else if (*s == '+'){
flag = 1;
s++;
}//一般人们不会正数不会加负号
else if (*s >= '0'&&*s <= '9'){
flag = 1;
}
//转字符为数字
long long n = 0;//不能定义为整型,那样超范围了也会自动截断,还是整型
while (isdigit(*s)){//判断是否是数字
n = n * 10 + (*s - '0')*flag;
if (n == INT_MAX || n == INT_MIN){
return 0;
break;
}
s++;
}//while 结束条件是,数字都转换完了,碰见非数字了,或者就是正常遇见'\0'
if (*s == '\0'){
st = HEFA;//正常转换
return (int)n;
}
else {
//非法转换
st = FEIFA;
return (int)n;
}
}
int main(){
//4种非法情况
//空指针
//空字符串
//非法字符
//超范围
const char *p = "a1234";
int ret = my_atoi(p);
if (st==HEFA)
printf("合法:%d\n", ret);
else printf("非法:%d\n", ret);
return 0;
}
解释:
完结