gpt4 book ai didi

c - 这个数组如何记录每个输入数字的出现?

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:29 26 4
gpt4 key购买 nike

我正在使用 K&R 书学习 C,并且遇到了一个显示数组用法的程序。该程序使用一个数组来记录输入的每个数字(数字)的出现,而不是存储单个数字(或者我认为)。除此之外,该程序计算空格和其他字符。这是程序 -

#include <stdio.h>

int main(int argc, const char * argv[])
{

// insert code here...
// printf("Hello, World!\n");

int c,i,nwhite,nother;
int ndigit[10];

nwhite=nother=0;
for(i=0;i<10;i++)
ndigit[i]=0;

while ((c=getchar())!=EOF)
if (c>='0' && c<='9')
{
++ndigit[c-'0'];
}
else if(c==' '||c=='\n'||c=='\t')
++nwhite;
else
++nother;
printf("digits = ");
for (i=0; i<10; ++i)
printf("%d", ndigit[i]);
printf("\n white space= %d, other=%d\n", nwhite,nother);

return 0;
}

这是一个示例输出-

my birthday was 08081980
hello
digits = 3100000031
white space= 5, other=18

我花了一段时间才弄清楚 ndigit 数组记录了每个数字出现的次数。示例- 0 在我的输入中出现了 3 次。

但是,我一直想不通数组是如何通过循环设置的。一开始,

for(i=0;i<10;i++)
ndigit[i]=0;

这个 for 循环将 ndigit 数组的每个元素设置为零。但是后来,我不明白这个 if 语句中发生了什么-

if (c>='0' && c<='9') {
++ndigit[c-'0'];
}

这可能是因为我以前没有遇到过这种类型的代码。 ++ndigit[c-'0'] 表达式试图做什么?这是否假设输入的每个数字都是字符形式,然后通过其 ASCII 值在内部转换为 int? c -'0' 表达式在这里做什么?

非常感谢您对此的帮助。

最佳答案

c-'0'给出c中字符对应的数值。它通过从 c 中的值中减去 '0' 字符的值来实现。这是可行的,因为在大多数字符方案中,数字被赋予连续的数字代码(例如,在 ASCII 中,数字 0,1,2,3,4,5,6,7,8,9被赋予数字代码值 48,49,50,51,52,53,54,55,56,57)。

ndigit[n] 获取 ndigit 的第 n 个值。由于n在本例中是c-'0',它给出了ndigit的元素对应于c表示的数值

++expr 递增(即增加 1)expr 引用的值。在这种情况下,expr 是数组中与 c 的数值对应的元素。

关于c - 这个数组如何记录每个输入数字的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com