【C语言】之''字符串统计''

老师平时布置的希冀系统上的作业答案,仅供参考!

【问题描述】

编写一个程序,接收用户输入的一个字符串(可以包含空格),统计其中所有出现过的所有字符,并按照频率高低的顺序排列输出。频率相同的字符按输入顺序输出。

【输入形式】

用户在第一行输入一个字符串,以回车结束输入。

【输出形式】

程序统计字符串中出现的所有字符,然后按照字符出现频率大小排序输出,频率相同时,按输入顺序输出。输出形式规定为每行输出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
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容