【C语言】模拟实现atoi函数
可以把小写l转换为1,大写O转换为0
#include#include #include #include #include #define N 20 int my_atoidec(const char *str) { int a=0; int sum=0; while(isdigit(*str)||*str=='l'||*str=='O') { a=*str; if(*str=='O') { a='0'; } else if(*str=='l') { a='1'; } else{} sum=sum*10+a-'0';// 减去字符0,也就是减去0的ASCII码值48,数字字符减去‘0’就得到了该数字 str++; } return sum; } int my_atoihex(const char *str) { int sum=0; while(isxdigit(*str)) { int ch=0; if(isdigit(*str)) { ch=*str-'0'; } else { ch=tolower(*str)-'a'+10; } sum=sum*16+ch; str++; } return sum; } int my_atoioct(const char *str) { int sum=0; while(isdigit(*str)&&*str!='8'&&*str!='9') { sum=sum*8+*str-'0'; str++; } return sum; } int my_atoi(const char *str) { int sum=0; assert(str!=nullptr); int tag=0;// 1负数,0正数 while(isspace(*str)) { str++;//跳过空白符 } if(*str=='-') { tag=1; str++; } else if(*str=='+') { tag=0; str++; } if(*str=='0') { if(*(str+1)=='x'||*(str+1)=='X') { sum=my_atoihex(str+2); } else{ sum=my_atoioct(str+1); } } else{ sum=my_atoidec(str); } if(tag) { sum=-sum; } return sum; } int main() { const char *str[]= { "12lO43", "12.43", "+12.45", "-12.45", "0123 425898", "0x123afbx", "-078", "qef2132", }; int n=sizeof(str)/sizeof(str[0]); for(int i=0;i %dn",str[i],my_atoi(str[i])); } return 0; }



