上篇文章介绍了itoa函数的实现,今天来说说atoi函数,主要思路是:将字符串从头开始读取,跳过最前面的空格以及其他无用字符;遇到正负号,做标记;之后的字符串,遇到数字则转换,遇到其他字符则直接跳出。好了,贴下代码:
1 int atoi(char str[]) 2 { 3 int flag=0; 4 int num=0; 5 int i=0; 6 while(str[i]==' '||str[i]=='\t') //判断字符串开头是否为制表符或者空格 7 { 8 i++; 9 } 10 while(str[i]=='-'||str[i]=='+') //判断字符串数字的正负 11 { 12 if(str[i]=='-') 13 { 14 flag=1; //为负的则标记 15 } 16 i++; 17 } 18 while(str[i]!='\0') //读字符串直到结尾 19 { 20 if(str[i]>='0'&&str[i]<='9') //判断字符是否为数字 21 { 22 num=str[i]-'0'+num*10; //将字符转化为数字 23 i++; 24 } 25 else //如果字符串中有其他字符直接跳出 26 break; 27 } 28 if(flag==1) 29 num=-num; //如果有标记,将数字变为负数 30 printf("%d",num); 31 return 0; 32 }
好了,应该能理解,最关键的在22行,将字符串数字转换为整型数字,OK。