C语言:读取一个文件,统计文件中英文单词的总数目,以及不同单词出现的次数

标签: C语言  c语言  c算法

c语言

读取一个文件,统计文件中英文单词的总数目,以及不同单词出现的次数


#include<stdio.h>
#include<ctype.h>
#include<string.h>
typedef struct Word{
	char s[20];
	int num;
} Word;           //s存储一个单词,num表示单词个数("单词表成员")
int main()
{
	char ch;
	int wordStart=0,numberofword=0;   //numberofword单词总数
	Word word[200];       //可以存储不同单词以及其个数的"单词表"
	int i=0,j=0,k,m=0;    
	char copy[20]="";     //暂存读取的一个完整单词

	FILE *fp1=NULL;
	FILE *fp2=NULL;
	fp1=fopen("text.txt","r");   //只读方式打开文件
	for (j = 0; j < 200; j++)
	{
		word[j].num=0;           //把结构体数组成员的num全部赋值为0
	}

	while(!feof(fp1))         //循环读取直到文件末尾
	{
		
		ch =fgetc(fp1);
		if( isalpha(ch)) //单词开始
		{
			wordStart = 1;   //标记
			copy[i++]=ch;      //把一个完整单词每个字符依次存进copy
		}
		else if( !isalpha(ch) && wordStart==1 )  //判断一个单词结束
		{
			numberofword++;   //单词总个数+1
			wordStart = 0;
			i=0;
			for(j=0;j<(m+1);j++)
			{
				if(!strcmp(word[j].s,copy))
				{
					k=0;  //标志前面出现过
					word[j].num++;   //相同单词计数+1
					break;
				}
				else
					k=1;   
			}

			if(k==1)  //标志未出现过的新单词
			{
				for(j=0;j<20;j++)   //将新单词加如"单词表"
				{
					word[m].s[j]=copy[j];  
				}
				word[m].num++;
				m++;  //单词表成员个数+1,同时也是下一成员的下标。
			}
			for (j = 0; j < 20; j++)  //一个单词结束,copy清空
			{
				copy[j]=NULL;
			}
		}
	}
	printf("不同的单词个数:%d\n",m);
	printf("总单词个数:%d\n",numberofword);
	for (j = 0; j < m; j++)
	{
		printf("%d ",word[j].num);
		puts(word[j].s);
	}
	return 0;
}

读取的文件内容

读取的text.txt

运行结果

运行结果

版权声明:本文为weixin_42281802原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42281802/article/details/104092340