我是一名
python程序员,从K& R书中学习C语言.这似乎是一个非常微不足道的问题,但我仍然难过.
下面附有K& R(RIP Ritchie!)书中的代码片段,它实现了atoi()函数.
下面附有K& R(RIP Ritchie!)书中的代码片段,它实现了atoi()函数.
atoi(s) /*convert s to integer */ char s[]; { int i,n,sign; for (i=0; s[i]==' '||s[i] == '\n' || s[i] == '\t'; i++) ; /* skip whitespace */ sign = 1; if (s[i] == '+' || s[i] = '-') /* sign */ sign = (s[i++] == '+') ? 1 : -1; for (n=0; s[i] >= '0' && s[i] <= '9'; i++) n = 10 * n + s[i] - '0'; return (sign * n); }
我的问题:
1)除了计算有效字符的数量之外,第一个’for’循环是否可用于任何目的?
2)如果(1)为真,则第一个循环将’i’的值设置为有效字符的数量 – 第二个for循环如何工作而不将i重置为0?
比如说我输入’2992’作为函数的输入.第一个for循环将i设置为3,那么函数的其余部分如何工作?
我的基础知识可能搞得一团糟,但任何帮助都会非常感激.谢谢,-Craig
解决方法
int atoi(char* str) { if(!str) printf("Enter valid string"); int number = 0; char* p = str; while((*p >= '0') && (*p <= '9')) { number = number * 10 + (*p - '0'); p++; } return number; }
这是ATOI背后的整个想法.
1)将指针设置在char数组的开头
2)然后在while循环中,你遍历每个字符并乘以10并通过减去0来添加字符.
如果您尝试2992,那么这个数字也是2992.