我是一名 Python 程序员,正在从 K&R 书中学习 C。这似乎是一个非常微不足道的问题,但我仍然被难住了。
下面附上 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,那么函数的其余部分如何工作?
我的基础知识可能一团糟,但任何帮助将不胜感激。谢谢,-克雷格
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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)