我完全不知道这个循环是做什么的。
int atoi(char s[])
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}
这部分我没有得到:
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
我在括号内得到了整个for循环,以及s [i] - '0'的作用。
但我不知道这里正在进行什么样的操作 - &gt; n = 10 * n
。
我不知道n代表什么,为什么乘以10。 我知道它将数字字符串转换为数字等价物,但我只是没有得到整个操作。
答案 0 :(得分:4)
但我不知道这里正在进行什么样的操作 - &gt; n = 10 * n
这就是你如何逐位建立一个数字。它与你编写计算器时的工作方式基本相同。如果我写了一个简单的计算器,这就是它如何处理输入 5 4 7 :
基本上,atoi
完全相同,但不是从按下按钮读取每个数字,而是从字符串中读取它们。每次读取新数字时,都会n *= 10
为下一个数字腾出空间,直接在最后添加数字。
答案 1 :(得分:1)
n
是已经处理过的数字。例如,对于字符串"123"
,首先,程序获得数字1
,将其转换为整数并将其存储在n
中,然后获取下一个数字2
,这是n = 10 * n
有用的地方,之前的1
乘以10
,并添加到下一个数字2
,结果是12
,这是存储为当前n
。
同样如此,处理3
时,先前存储的12
乘以10
,结果为120
并添加到3
,结束结果为123
。