#include<stdio.h>#include<stdlib.h>intmystrlen(constchar*s){int len =0;while(s[len]){
len++;}return len;}intmypow10(int n)//得到10的n次方{if(n ==0)return1;if(n ==1)return10;int base =10;int i;for(i =1; i < n; i++){
base *=10;}return base;}intmychartoint(char c)//把一个字符转化为一个从0到9的整数{return c -'0';}intmy_atoi(constchar*nptr){/* get length */int len =mystrlen(nptr);int i;int value =0;for(i =0; i < len; i++){
value +=mychartoint(nptr[i])*mypow10(len - i -1);}return value;}intmain(int argc,constchar*argv[]){if(argc >1){int ret =atoi(argv[1]);printf("%d\n", ret);}else{char*a ="1234567890";int i =my_atoi(a);printf("%d\n", i);}return0;}
测试结果
#include<stdio.h>#define IS_DIGIT(_arg_) ({ \
char _ch_ = _arg_; \
(_ch_ >= '0' && _ch_ <= '9'); \
}) intmyatoi(constchar*str){int integer =0;constchar* p = str;int flag =1;switch(*p){case'+':
p ++;break;case'-':
flag =-1;
p ++;break;default:break;}for(;'\0'!=*p &&IS_DIGIT(*p); p ++){
integer *=10;
integer +=*p -'0';}return flag >0? integer :-integer;}intmain(){int value;
value =myatoi("-12345");printf("value: %d\n", value);return0;}