老师平时布置的希冀系统上的作业答案,仅供参考!
【问题描述】
编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。
【输入形式】
用户在第一行输入一个字符串,以回车结束输入。
【输出形式】
程序统计字符串中出现的所有字符,然后按照字符出现频率大小排序输出,频率相同时,按输入顺序输出。输出形式规定为每行输出4个字符数据,输出格式为:字符-出现次数。每个字符-出现次数输出中间用一个空格分隔,每行末尾没有空格。程序输出结尾有一个回车。
【样例输入】
The job requires an agile mind.
【样例输出】
-5 e-4 i-3 r-2
a-2 n-2 T-1 h-1
j-1 o-1 b-1 q-1
u-1 s-1 g-1 l-1
m-1 d-1 .-1 #表示空格(在程序请输出空格,而不是字符’#’,这里只是表示而已。)
【样例说明】
用户首先输入字符串The job requires an agile mind. 程序统计完毕之后按照每行4个统计结果输出,字符串中有5个空格,所以输出为#-5,#表示空格。
【参考答案】
#include <stdio.h
#include <string.h>
#include <stdlib.h>
typedef struct
{
char c;
int count;
}Letter;
void swap(Letter* x,Letter* y)
{
Letter t;
t.c=x->c;
t.count=x->count;
x->c=y->c;
x->count=y->count;
y->c=t.c;
y->count=t.count;
}
void sort(Letter* L,int k)
{
int i,j;
for(i=0;i<k-1;i++)
for(j=0;j<k-i-1;j++)
{
if(L[j].count<L[j+1].count)
swap(&L[j],&L[j+1]);
}
}
int main()
{
char buf[100];
Letter L[100];
int i,j,k=0;
memset(L,0,sizeof(L));
gets(buf);
for(i=0;i<strlen(buf);i++)
{
for(j=0;j<k;j++)
{
if(L[j].c==buf[i])
{
L[j].count++;
break;
}
}
if(j==k)
{
L[k].c=buf[i];
L[k].count=1;
k++;
}
}
sort(L,k);
for(i=0;i<k;i++)
{
printf("%c-%d ",L[i].c,L[i].count);
if((i+1)%4==0)printf("\n");
}
printf("\n");
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容