#include"stdio.h"
main(void)
{
int n[26],i;
char ch;
for(i=0;i<26;i++)
n[i]=0;
while((ch=getchar())!='\n')
{
if(ch>='A'&&ch<='Z')
n[ch-65]+=1;
}
for(i=0;i<26;i++)
if(n[i]!=0)
printf("%c,%d\n",i+65,n[i]);
}
输入:AAAASSSDDDFFF
运行结果:
A,4
D,3
F,3
S,3
请按任意键继续. . .
供参考:
#include"stdio.h"
main(void)
{
int n[26],i;
char ch;
for(i=0;i<26;i++)//循环 n[0] -- n[25] 数组初始化值为 0
n[i]=0;
while((ch=getchar())!='\n')//循环读入一个字符赋值给 ch ,直到读入'\n'回车换行符时退出循环
{
if(ch>='A'&&ch<='Z')//对读入的字符进行判断,是否是大写的字母,判断区间 'A' --- 'Z'之间
n[ch-65]+=1;//ch-65等价于 ch-'A',字符'A'的ascii值为65,类推'Z'的值为65+25=90
} //n[ch-65] 如果读入的ch='A',n['A'-65]=n[0],类推'Z'时,n['Z'-65]=n[25]
for(i=0;i<26;i++)
if(n[i]!=0) //当n[i]的值不为0 时输出
printf("%c,%d\n",i+65,n[i]);// i=0时,i+65=65='A',输出字符 A,n[0]的值
// i=3时,i+65=68='D',输出字符 D,n[3]的值
//以此类推,输出n[i]!=0时的字符 和 个数值。
}
统计大写字母的个数,你要了解怎么实现则会个逻辑,你需要知道的知识点有以下:
1:A-Z总共有26个字母
2:我们定义一个char,底层其实是数字,按照ASSII码表进行存储的,这里在处理一个字符时,也是要根据这个码表中对应的值进行处理的。
3:字符是可以用数字标表示的,其实就是ASSII表查的,(例如你定义char a = 65 和char a='A'是一样的)
这里实现这个业务的逻辑就是:
1:使用长度位26数组标识大写字母A-Z每个对应的个数(定义存储变量)
2:查询以下ASSII码表 我们知道A-Z对应的实际底层存储的是 65-90
3:循环提取每个字符,判断该字符是否是大写字符,如果是则在对应存储为+1.
A B C D 。。。。Z
65 66 67 68 ... 90
n数组来存储每个字符对应的个数,数组从零开始,是不是A字符对应0,B字符对应1,。。。。Z字符对应90-65....
4:最终遍历我们的目标数组,按下标+65标识原字符,以及输出对应数组位。
#include"stdio.h"
int main(void)
{
int n[26],i;
char ch;
for(i=0;i<26;i++) //初始化 26个位置存储A-Z每个字符的个数
{
n[i]=0;
}
while((ch=getchar())!='\n') //循环提取每个字符进行判断 判断这个字符是否是大写
{
if(ch>='A'&&ch<='Z') //满足条件 则在对应下标下进行+1
{
n[ch-65]+=1; //有26个字符,数组下标0~26,对应大写字符A-Z()65~90
//这里去搜索以下ASSII码表,查一下A-Z对应的十进制值
}
}
for(i=0;i<26;i++) //根据数组下标 反推原字符及对应的个数
{
if(n[i]!=0) //该字符数不为0
printf("%c,%d\n",i+65,n[i]); //下标+差值(65) 输出个数
}
return 0;
}