统计文档中的单词出现的次数

统计文档中的单词出现的次数

给定一个.txt文件要去统计出文件长度,文件有多少个单词,每个单词出现的次数,并按照降序输出。
思路:
定义结构体存放单词和次数
读取文件
求文件长度
判断是否为单词并将单词存入结构体
统计每个单词出现次数
排序
代码如下:

#include
#include
#include
#include
#include
#define MAX 500000
typedef struct Word
{
char arr[40];
int count;
}Word;
typedef struct Num
{
	Word *brr;
	int length;
}N;
N Z;

int Size(char *p)//计算文件长度
{
	FILE *fp=fopen(p,"r");
	fseek(fp,0,SEEK_END);
	int size=ftell(fp);
	//rewind(fp);
	fclose(fp);
	return size;
}
char* Read(char *p)//读文件到str
{
	FILE *fr = fopen(p,"r");
	assert (fr != NULL);
	int size=Size(p);
	char *str=(char *)malloc((size+1)*sizeof(char));
	
	for(int i=0;i= 'a' && p <= 'z' || p >= 'A' && p <= 'Z'||p == 39||p == 45)//  '  和  - 也算字符
	{
		return true;
	} 
	else
	{
		return false;
	}
}
void Getword(char *str)
{
	void Count(Word *end);
	Z.length=0;
	Z.brr->count=0;
	char* head=str;
	Word* A=Z.brr;
	while(*head!='\0')
	{
		bool Switch=true;
		int i=0;
		while(Is_Alpha(*head))
	{
		A->arr[i++]=*head;
		head++;
		if(Switch)
		{
			Z.length++;
			A->count=1;	
			Switch=false;
		}
	}
	if(!Switch)
	{
		A->arr[i]='\0';
		A++;

	}
	head++;
	}
	A--;
	printf("总单词数为 %d\n",Z.length);
	Count(A); 
}
void Count(Word *end)
{
	
	Word *head=Z.brr;
	Word *head2=NULL;
	while(head<=end)
	{
		head2=head+1;
		if(head->count==0)
		{
			head++;
			continue;
		}
		while(head2arr,head2->arr)==0&&head2->count!=0)
			{
			head->count++;
			head2->count=0;
			}
			head2++;
		}
		head++;
	}
}
void Myprint(int len)
{
	int max=0;
	int flg2;
	for(int i=0;i<7072;i++)
	{
		for(int j=0;j

你可能感兴趣的:(c语言)