📄 chen117.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 + -