我试图从K&R练习中重写itoa()函数,但是我没有定义它。我在库中看到了函数的答案,但我无法理解do块中的是什么。请解释给我听。谢谢!
/* itoa: convert n to characters in s */
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}发布于 2018-07-05 11:38:28
s[i++] = n % 10 + '0';的意思是:
s[i++]是指字符数组s中的字符数i,并将i增加1。n % 10意味着您只取最后一个数字,例如在123中,123 % 10返回3,这是一个数字,这是为了将您的数字剪切成数字,这样您就可以用每个数字创建一个字符。+ '0'意味着添加char '0'的ascii值,例如,int 1 + '0'返回字符'1',这样就可以得到char数组。n /= 10意味着我们删除最后一个数字,实际上,我们将其添加到char数组中,这样我们就可以删除它,例如,123 / 10 = 12,然后您可以执行12 % 10来获得第二个数字:2。这给了我们一个倒置的char数组,例如,对于123,我们得到了一个类似于{'3','2','1'}的数组,所以在最后我们调用反向s到(很明显的)反转我们的char数组
对于负的n,您只需在char数组中添加一个'-',并将n乘以-1,使其变为正数,并且您可以一如既往地完成您的工作:)
希望它能帮助你:)
发布于 2018-07-05 11:31:45
对于非负的n
n /= 10从整数类型中删除最不重要的数字。它是n = n / 10的缩写,n / 10中的任何余数都会被丢弃。
n % 10从n中提取最不重要的数字,并将其添加到'0'中,给出该数字的纹理等价物。(注意,这种惯用技术适用于C.支持的任何字符编码)
https://stackoverflow.com/questions/51190246
复制相似问题