首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图理解itoa函数

试图理解itoa函数
EN

Stack Overflow用户
提问于 2018-07-05 11:29:49
回答 2查看 387关注 0票数 2

我试图从K&R练习中重写itoa()函数,但是我没有定义它。我在库中看到了函数的答案,但我无法理解do块中的是什么。请解释给我听。谢谢!

代码语言:javascript
复制
 /* 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);
 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-05 11:38:28

s[i++] = n % 10 + '0';的意思是:

  1. s[i++]是指字符数组s中的字符数i,并将i增加1。
  2. n % 10意味着您只取最后一个数字,例如在123中,123 % 10返回3,这是一个数字,这是为了将您的数字剪切成数字,这样您就可以用每个数字创建一个字符。
  3. + '0'意味着添加char '0'的ascii值,例如,int 1 + '0'返回字符'1',这样就可以得到char数组。
  4. n /= 10意味着我们删除最后一个数字,实际上,我们将其添加到char数组中,这样我们就可以删除它,例如,123 / 10 = 12,然后您可以执行12 % 10来获得第二个数字:2。

这给了我们一个倒置的char数组,例如,对于123,我们得到了一个类似于{'3','2','1'}的数组,所以在最后我们调用反向s到(很明显的)反转我们的char数组

对于负的n,您只需在char数组中添加一个'-',并将n乘以-1,使其变为正数,并且您可以一如既往地完成您的工作:)

希望它能帮助你:)

票数 6
EN

Stack Overflow用户

发布于 2018-07-05 11:31:45

对于非负的n

n /= 10从整数类型中删除最不重要的数字。它是n = n / 10的缩写,n / 10中的任何余数都会被丢弃。

n % 10n中提取最不重要的数字,并将其添加到'0'中,给出该数字的纹理等价物。(注意,这种惯用技术适用于C.支持的任何字符编码)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51190246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档