程序要求:
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}.
测试结果应如下图
大致就是这个样子,实在没有头绪该怎么写,如果能写些注释就更好了,十分感谢
如何输入一个不确定行列数的二维数组呢?比如这里我要建立一个A[max][26]的数组,但是max是不确定的,我在程序里这样写提示我是错误的,该如何输入呢?另外这个max是在我的读取函数里得到的,能直接套用到这个画数组的函数里么?
追答max是根据你计算完毕每个字母有多少次得出的
这里的max是指出现最多的字母
可以一次循环得到
max = A[i]
for i 0-25
if A[i] > max
max = A[i];
读取函数得到的当然可以,有两种办法,一是用读取函数返回一个max
另外修改全局变量
还有一种就是修改main函数下的变量,用指针
我仔细看了下题,这里要求的是在读入时计算出max,因此是用指针修改main函数下的max实现的
另外这里不需要二维数组
是的,我知道max是怎么来的。因为我有2个调用函数,在第二个函数里需要建立一个二维数组,数组的行数为max,但是我的max是在第一个函数里得到的,能否直接代入到第二函数里呢?如果我直接char A[max][26]的话程序提示我是错误的,所以我该如何建立这个数组呢,第二个函数我是这样的
不,这里不用二维数组,我说过的
histo是各字母的次数,仔细想想
只要每次if( histo[j] == max)就证明我这个要输出,这里max会自减
那么是不是就可以把他减1,使下一次也能使if成立呢?
呵呵,还能省个i的变量空间呢
for( ; max>0; max--)
{
for(j=0; j<26; j++)
if(histo[j] == max)
{
printf("| ");
histo[j]--;
}
else
printf(" ");
putchar('\n'); //别忘了换行
}