(急)求帮忙写一个C语言程序,大体就是计算一句话中各字母出现的次数,并输出一个数组

程序要求:
1.使用C语言,不是C++
2.输入一个指令,R代表读取一句话并将个字母出现字数保存到一数组内,P代表输出出现次数的数组,C代表清除以前读过句子的字母数,Q代表退出程序
3.使用两个调用函数 void ReadText(int histo[], int *max)和
void DrawHist(int histo[], int max),第一个是读取句子,第二个是画出数组,histo[]是用来存放26个字母出现次数,出现次数用“|”表示,即出现一次多一个|(如图中所示),max是其中出现次数最多的字母的出现次数。
4.可以使用isalpha()和tolower()来计算出现次数和将大写字母变为小写字母。
5.不输入C指令再次输入R指令的话字母出现次数累加到原来基础上
6.不区分大小写,如果输入Hello World!,出现次数数组应是{0,0,0,1,1,0,0,1,0,0,0,3,0,0,2,0,0,1,0,0,0,0,1,0,0,0}.
测试结果如下

#include <stdio.h>
#include <ctype.h>
void ReadText(int histo[], int *max) {
int i = 0;
char s[256];
fflush(stdin);
printf("请输入一个英文句子:\n");
gets(s);
while(s[i]) {
if(isalpha(s[i])) {
if(s[i] >= 'a') ++histo[s[i] - 'a'];
else ++histo[s[i] - 'A'];
}
++i;
}
*max = histo[0];
for(i = 1; i < 26; ++i)
if(histo[i] > *max) *max = histo[i];
}

void DrawHist(int histo[], int max) {
int i,j;
for(i = max; i > 0; --i) {
for(j = 0; j < 26; ++j) {
if(histo[j] >= i) printf("| ");
else printf(" ");
}
printf("\n");
}
for(i = 0; i < 26; ++i) printf("+-");
printf("\n");
for(i = 'A'; i <= 'Z'; ++i) printf("%c ",i);
printf("\n\n");
}

void menu() {
int i,an,histo[26] = {0},max = 0;
do {
printf("C : 清除以前读过句子的字母数。\n");
printf("R : 读取一句话。\n");
printf("p : 输出各个字母出现次数。\n");
printf("Q : 退出程序。\n\n");
printf("输入命令: C、R、P 或 Q : ");
fflush(stdin);
an = getchar();
switch(an) {
case 'c' :
case 'C' : for(i = 0; i < 26; ++i) histo[i] = 0; break;
case 'r' :
case 'R' : ReadText(histo,&max); break;
case 'p' :
case 'P' : DrawHist(histo,max); break;
case 'q' :
case 'Q' : break;
default : printf("%c是无效命令。\n",an);break;
}
}while(an != 'Q' && an != 'q');
}

int main() {
menu();
return 0;}
温馨提示:答案为网友推荐,仅供参考
相似回答