出现次数(Number Occurrences)
修改如下程序,使其打印⼀份列表,显示出每个数字在数中出现的次数。
输出范例:
Enter a number: 41271092
Digit: 0 1 2 3 4 5 6 7 8 9
Occurrences: 1 2 2 0 1 0 0 1 0 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main(void)
{
int ch = 0;
int i;
int arr[10] = { 0 };
while ((ch = getchar()) != ‘\n’)
{
for (i = 0; i < 10; i++)
{
if (ch == (i + 48))
arr[i] = arr[i] + 1;
}
}
printf(“Digit: 0 1 2 3 4 5 6 7 8 9\n”);
printf(“Occurrences:”);
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
11111111…****getchar函数:**只读取字符,且只读取一个字符,比如,如果没用scanf的话,你只用了getchar,程序会叫你输入数据,如果输入120,getchar会读一个一个的字符1再读2最后读取字符3,还有最最后读取字符\n也就是回车,不会读取字符120的这种情况,只会读取一个,比如又输入3 4 a,挨着读3空格4空格a\n。反正记住getchar与putchar都一样,不会读太多合起来的字符。不会读大于九的数字的,所以这题才叫你求0到9的字符个数,没叫你求10的个数。遇到getchar,就默认为字符了,不是整型。且遇到getchar一次,就读取输入流缓冲区中的字符一次。(所以才把它放在ch中,不然直接用它去做比较,不用一次就变一次吗)
2222222…**变量的转换:变量ch为int,所以ch=getchar()的意思是读取一个字符,然后·把这个字符放入变量ch中,且转换为整型。比如读取字符0,由于字符·0的ASCLL值为48,所以ch其实是等于48的。所以与i进行比较的时候,i要加上48才行,才是公平的比较。
333333…***求个数思想:数列的下标为0到9,恰好可以作为看字符是否以下标的类型出现了几次,下标对应的数列中的值就加几。例如如果字符0总共出现了三次,所以字符0对应的下标0再对应的数列值0就加1,遇到一次getchar等于1,就加一,总共加两次.
444444…**注意:**ch只能为int不然为char的话,就不能与i进行比较了,除非把i也进行转换为char型