c++ 求输入语句频率的程序

来源:百度知道 编辑:UC知道 时间:2024/06/19 05:17:33
1.输入N个语句,按照出现的频率排序,然后输出这些排好序的语句
2.出现的频率一样的话,先输入的语句放在前面
3.N的取值范围是500,000一下的整数,语句的长度是不超过50
4.输出时,先输出语句出现的个数,
然后按照出现频率高的排列顺序输出
5.如果N取最大值500,000的话,要在2分钟之内出结果
例如:
Input
7
I hate DS!!
I hope to love DS.
I hate this homework.
I hate DS!!
I hate this homework.
I hate everyone that loves DS.
I hate DS!!

Output
4
3: I hate DS!!
2: I hate this homework.
1: I hope to love DS.
1: I hate everyone that loves DS.

就是这样一个程序,请高手帮忙

我这多次一举了,把字串都排好序了。:(

二楼的朋友的算法不错,相同的句子越多,越能显出效果。
钽如果是要楼主说的500000呢?你换成long 也没用,一次性不可能申请到那么大的内存块。

时间和空间兼顾的话就用链表,动态分配空间,并在读入时就比较,如己有相同字串就结束比较,进行下个读入,
因楼主说的字串最长为50个字符,结构中就不用动态了,如果要处理的字串长度相差很大,就用,
struct sp{
char *s;
struct sp *next;
};
也写了从文件读取,如从键盘输入只要稍改一下就行。看下运行结果。
http://hi.baidu.com/ryw12403/blog/item/e8bace7fe822540f28388ae6.html

#include <stdio.h>

#include <string.h>

struct sp{
char s[51];
int n;
struct sp *next;
};

main()
{
struct sp *p,*h,*s,*t;
int i=0,j,k;
char str[51];
FILE *fp1,*fp2;

fp1=fopen("in.txt","r"); /*文件名*/
fp2=fopen("out.txt","w");

if((h=(struct sp *)malloc(sizeof(struct sp)))==NULL)
{