c语言一道题请大家帮我挑下错误

来源:百度知道 编辑:UC知道 时间:2024/05/15 15:28:50
输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(小写字母)和使用频率(出现的次数)。

#include <stdio.h>
#include <string.h>
char str[150];
int a[26],temp,i,j;
int main(){
memset(a,0,sizeof(a));
while(gets(str)){

for(i=0;i<strlen(str);i++){
if(str[i]>='a') str[i] -= 32;
a[str[i]-'A']++;

}
for(i=0;i<26;i++)
for(j=0;j<26-i-1;j++)

if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;

}

for(int i=0;i<26;i++)
if(a[i]!=0)
printf("%c %d\n",i+'A',a[i]); }
return 0;
}

这个题目采用结构体来做比较好,下面的程序是我采用的方法:
定义一个结构体数组,包含26个结构,结构的成员分别是小写字母a-z,以及它们出现的个数。
在用户输入内容之后,用check函数检查是否字母,如果是,那么转化为小写字母后进行统计;如果不是,检查下一个字符。直到用户输入换行符。
最后排序并输出。
对于楼主的程序,我倒看的不是很明白,特别是那个
memset()什么的。最后建议楼主,尽量采用模块化设计,这样头绪会清楚点,别人也容易看的懂。
#include <stdio.h>
#include <string.h>
#include <ctype.h>

struct gl
{
char chr;
int times;
}; //定义结构体

int count=0; //输入的字母的个数
struct gl a[26]; //小写字母统计数组

void check(char ch); //检查输入的字母,并统计
void sort(struct gl a[], int n); //排序
void display(struct gl a[], int n); //输出数组内容

int main()
{
char ch;
int i,j;

for(i=0;i<26;i++)
{
a[i].chr='a'+i;
a[i].times=0;
}
while((ch=getchar())!='\n')
{
if(!isalpha(ch))continue;
check(ch);
count++;
}
sort(a,26);
display(a,26);

getch()