(急)求帮忙写一个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}.
测试结果应如下图

大致就是这个样子,实在没有头绪该怎么写,如果能写些注释就更好了,十分感谢

读取计数清空我就不说了,我相信你能处理

说说画图,这里是这样的
一次画一条|

那么我们可以这样做,先找到26个字母里面最多的那个
然后
for(i= max; i>0; i--)
for(j=0; j<26; j++)

if( char_count[j] == i )
printf(" |");
else
printf(" ");
大概思路就是这样追问

如何输入一个不确定行列数的二维数组呢?比如这里我要建立一个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'); //别忘了换行
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-02
分为两个用例,分开实现,第一个是寻找文本或者是字符串流中某个字符出现的次数,并记录
第二个是显示,这个其实也不复杂,出现最多的那个,就是行数,列数可以根据最下面那一行算出,lz不会输出是吧,看看stdio.h中,有关于输出的功能,调查一下,做个demo最后整合到一起。
我不会写代码给你的,因为我也需要调查,设计整合优化代码然后发给你,我没那么多时间,但我可以给你一个思路。把复杂的系统分成简单小模块是设计的基础。
第2个回答  2012-11-02
这个问题用低版本的编译器(比如TC3.0)容易解决,统计出结果以后可以用gotoxy函数定位输出每一个'|'。
第3个回答  2012-11-02
今天一上班,看到有这个任务。。大致看了下题目,难到是不难,就逻辑比较多

第一步,设计好数据结构
第二步,读取输入的字符串,把字符串里的数据通过一定的计算方式,把读取到的信息存入你设计好的数据结构(当然,这时的数据结构应该有了你的所有字符的 C R P的数据了)
第三部,就是负责打印了,按固定格式把你的数据结构dump出来。

要上班,代码就不写了,LZ不喜欢这样的回答,就忽略我吧。。哈哈
第4个回答  2012-11-02
首先统计问题。逐个扫描字符串,看看是第几个字母,然后再数组相应位置累加。
二,求最值问题。扫描数组,找最大值。
三,格式化输出。有了数据,输出就简单了吧,加两个循环就行了。