⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.cpp

📁 用Hash技术统计某个C源程序中的关键字出现的频度
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct
{
	char a[20];
	int flag;//0表示空,1表示满
	int num;
}hash_biao[41];
//--------------------------------------------------------------------------------------------------------------------------------
int hash(char a[])
{
	char c0,c1;
	int i;
	i=1;
	c0=a[0];
	while(a[i]!='\0')
	{
		c1=a[i];
		i++;
	}
	i=(c0*100+c1)%41;
	return(i);
}
void creat_hash(hash_biao hash_biao)
{
	char keyword[32][20]={"int","char","long","float","double","short","unsigned","struct","union","enum","auto","extern","static","register","void","typedef","goto","return","break","continue","if","else","default","do","while","for","switch","case","define","include","endif","sizeof"};
	int j=0;
	int i;
	while(j<32)
	{
		i=hash(keyword[j]);
		while(hash_biao[i].flag)
		{
			i=(i+1)%41;
		}
		strcpy(hash_biao[i].a,keyword[j]);
		hash_biao[i].flag=1;
		j++;
	}
	for(i=0;i<41;i++)
	{
			
			printf("%s	",hash_biao[i].a);
			printf("%d\n",hash_biao[i].flag);
	}
}
void getword(hash_biao hash_biao)
{
	char s[30],b[20];
	FILE *fp;
	char c,d;
	int i=0;
	printf("输入文件名:");
	scanf("%s",s);
	fp=fopen(s,"r");
	fscanf(fp,"%c",&c);
	while(!feof(fp))
	{
		i=0;
		if(c=='/')
		{
			fscanf(fp,"%c",&c);
			if(c=='/')//行注释
			{	
				fscanf(fp,"%c",&c);
				while(c!=10)
				{fscanf(fp,"%c",&c);}
				fscanf(fp,"%c",&c);
			}
			else if(c=='*')//块注释
			{
				fscanf(fp,"%c",&c);
				d=c;
				fscanf(fp,"%c",&c);
				while(d!='*'||c!='/')
				{			
				d=c;
				fscanf(fp,"%c",&c);
				}
				fscanf(fp,"%c",&c);
			}
			else fscanf(fp,"%c",&c);
		}
		else
		{
			while(c>=97&&c<=122)
			{
			b[i]=c;
			fscanf(fp,"%c",&c);
			i++;
			}
			b[i]='\0';
			if(b[0]!='\0')
			{
				i=hash(b);
				while(hash_biao[i].flag!=0)
				{
					if(strcmp(b,hash_biao[i].a)!=0)
						{	i=(i+1)%41;	}
					else 
					{
					hash_biao[i].num++;
					break;		}
				}
			}
		fscanf(fp,"%c",&c);
		}
	}
}
void main()
{
	hash_biao hash_biao;
	int i;
	for(i=0;i<41;i++)
	{
		hash_biao[i].flag=0;
		hash_biao[i].num=0;
	}
	creat_hash(hash_biao);
	getword(hash_biao);
	for(i=0;i<41;i++)
	{
		if(hash_biao[i].num!=0&&hash_biao[i].flag!=0)
		{	
			printf("%s	",hash_biao[i].a);
			printf("%d\n",hash_biao[i].num);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -