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

📄 chen117.c

📁 用于关键字查找功能
💻 C
字号:
/*陈锋-200382073-自动化*/
/***********************/
/******关键字查找*******/

/*输入关键字时,回车换行*/

#include<stdio.h>                                                   /*头文件的引用*/
#include<string.h>
#include<stdlib.h>
#include<ctype.h>                                                   /*定义字符数组长度*/
#define N 100

struct keyword                                                      /*定义结构体,用以存放关键字和记个数*/
{
	char key[10];
	unsigned short int n;
};

void main()                                    /******************主函数***********************/
{
    FILE *fi;
	char file[20];                                                   /*存路径数组*/
	short int r,i;
	struct keyword *str;                            
    void find(FILE *fi,struct keyword *str,short int r);             /*查找函数声明*/
    printf("Welcome to use this programe!\n\nPlease input the path:\nFor example:  E:\\\\chen117.c\n\n");
    gets(file);
    if((fi=fopen(file,"r"))==NULL)
	{
        printf("\nError!\n\nCan't open input file!\n\n");
        exit(0);
    }
	printf("\nPlease input the number of the keywords:\n\n");
	scanf("%d",&r);
    str=(struct keyword *)malloc(r*sizeof(struct keyword));          /*动态分配空间*/
	
	printf("\nPlease input %d keywords:\n\n",r);
    getchar();
	for(i=0;i<r;i++)
	{
	    printf("keyword %d:",i+1);
		gets(str[i].key);
		str[i].n=0;
	}
	find(fi,str,r);                                                  /*调用查找函数*/
	fclose(fi);                                                      /*关指针*/

	printf("\nThe result is:\n");	                                 /*输出结果*/
	for(i=0;i<r;i++)
		printf("%s: %d\n",str[i].key,str[i].n);
    free(str);
    printf("\nThank you for your use!\n\n");
}

void find(FILE *fi,struct keyword *str,short int r)      /*********************查找函数************************/    
{
	short int i,j;
	char s[10],c,c1;
    void del1(FILE *fi,char c);                                     /*声明双引号排出函数*/
	void del2(FILE *fi,char c,char c1);                             /*声明注释排出函数*/
	for(i=0;i<r;i++)					                        	/*判断当开头就有关键字的情况*/
	{
		rewind(fi);                                                 /*指针置于开头*/
		if(fgetc(fi)==str[i].key[0])
		{
			fseek(fi,-1L,1);
			for(j=0;j<(short int)(strlen(str[i].key));j++)
				s[j]=fgetc(fi);
			s[j]='\0';
			if((!isalpha(fgetc(fi)))&&(strcmp(s,str[i].key)==0))/*判断是不是字母,并比较字符串*/
				str[i].n++;
		}
	}
    for(i=0;i<r;i++)						                     /*判断关键字不在开头情况*/
	{
		fseek(fi,1L,0);
		while(!feof(fi))
		{
			c=fgetc(fi);
			c1=fgetc(fi);
			fseek(fi,-1L,1);
	        if(c1==-1||c==-1)
				break;
			del1(fi,c);
			del2(fi,c,c1);
			if((!isalpha(c))&&(c1==str[i].key[0]))		        	/*遇到相等的字符,开始判断*/
			{
				for(j=0;j<(short int)(strlen(str[i].key));j++)
					s[j]=fgetc(fi);
				s[j]='\0';
				if((strcmp(s,str[i].key)==0)&&(!isalpha(fgetc(fi))))
					str[i].n++;
				fseek(fi,-(long)j,1);
			}
		}
	}
}
	
void del1(FILE *fi,char c)      /***************双引号排出函数***************/
{
	char c1,c2; 
	if(c=='"')	                                                          /*遇到双引号其间内容不作为关键字*/					
			{
				while(!feof(fi))
				{
					c1=fgetc(fi);
					c2=fgetc(fi);
					fseek(fi,-1L,1);
					if(c1==-1||c2==-1)
						break;
					if((c1=='\\')&&(c2=='"'))
						fseek(fi,1L,1);
					else if(c1=='"')
						break;
				}
			}
}
	
	
	
	
void del2(FILE *fi,char c,char c1)	   /******************注释排出函数********************/
{
	char c2;
	if((c=='/')&&(c1=='*'))	                                             /*遇到注释其间内容不作为关键字*/
			{
			    while(!feof(fi))
				{
					c1=fgetc(fi);
		            c2=fgetc(fi);
			        fseek(fi,-1L,1);
					if(c1==-1||c2==-1)
						break;
				    if(c1=='*'&&c2=='/')
					{
					    fseek(fi,1L,1);
					    break;
					}
				}
			}
}

⌨️ 快捷键说明

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