试图理解 itoa 函数
Trying to understand itoa function
我尝试重写 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] = '[=10=]';
reverse(s);
}
对于非负值n
:
n /= 10
从整数类型中删除最低有效位。它是 n = n / 10
的 shorthand,n / 10
的任何余数都将被丢弃。
n % 10
从 n
中提取最低有效数字,并将其添加到 '0'
得到该数字的结构等价物。 (请注意,这种惯用技术适用于 C 支持的任何字符 encoding。)
s[i++] = n % 10 + '0';
表示:
s[i++]
表示字符数组 s
中的字符编号 i
并将 i
递增 1
n % 10
表示只取最后一位,比如在123
、123 % 10
、returns、3
中就是一个数字,这是将您的号码切成数字,这样您就可以用每个数字创建一个字符。
+ '0'
的意思是把字符'0'
的ascii值加上,比如int 1 + '0'
returns字符'1'
这样就可以得到一个字符数组。
n /= 10
表示 我们删除了最后一位 ,实际上,我们将它添加到我们的 char 数组中以便我们可以删除它,例如 123 / 10 = 12
然后你可以做 12 % 10
得到第二个数字:2
这给了我们一个反转的 char 数组,例如,对于 123,我们得到了一个像 {'3', '2', '1'} 这样的数组,所以最后我们调用 reverse s 到 (thx captain obvious) reverse我们的字符数组
对于负数 n
你可以只添加一个 '-'
到你的 char 数组并将你的 n
乘以 -1
所以它变成正数,你可以做你的一如既往的工作:)
希望对你有帮助:)
我尝试重写 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] = '[=10=]';
reverse(s);
}
对于非负值n
:
n /= 10
从整数类型中删除最低有效位。它是 n = n / 10
的 shorthand,n / 10
的任何余数都将被丢弃。
n % 10
从 n
中提取最低有效数字,并将其添加到 '0'
得到该数字的结构等价物。 (请注意,这种惯用技术适用于 C 支持的任何字符 encoding。)
s[i++] = n % 10 + '0';
表示:
s[i++]
表示字符数组s
中的字符编号i
并将i
递增 1n % 10
表示只取最后一位,比如在123
、123 % 10
、returns、3
中就是一个数字,这是将您的号码切成数字,这样您就可以用每个数字创建一个字符。+ '0'
的意思是把字符'0'
的ascii值加上,比如int 1 + '0'
returns字符'1'
这样就可以得到一个字符数组。n /= 10
表示 我们删除了最后一位 ,实际上,我们将它添加到我们的 char 数组中以便我们可以删除它,例如123 / 10 = 12
然后你可以做12 % 10
得到第二个数字:2
这给了我们一个反转的 char 数组,例如,对于 123,我们得到了一个像 {'3', '2', '1'} 这样的数组,所以最后我们调用 reverse s 到 (thx captain obvious) reverse我们的字符数组
对于负数 n
你可以只添加一个 '-'
到你的 char 数组并将你的 n
乘以 -1
所以它变成正数,你可以做你的一如既往的工作:)
希望对你有帮助:)