?? fine.c
字號:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#define MAX 33
#define SIZE 1000
struct node{
char data[33];
struct node *next;
};
struct {
int ip;
struct node *link;
}hash[SIZE];
typedef struct
{
char b[40];
}string;
char *token[]={"auto","double","int","struct",
"break","else","long","switch",
"case","enum","register","typedef",
"char","extern","return","union",
"const","float","short","unsigned",
"continue","for","signed","void",
"default","goto","sizeof","volatile",
"do","if","static","while","main"};
int h(char *p);
int zhifutype(char *p);
void creatHash();
int searchHash(char *p);
void insertHash(char *p);
string zf(FILE *fp);
void display();
void main()
{
FILE *fp;
char a[1000];
string c;
int i=0;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("can't open the file\n");
exit(-1);
}
while(!feof(fp))
{
a[i]=fgetc(fp);
i++;
}
a[i]='\0';
printf("%s",a);
fclose(fp);
creatHash();
if((fp=fopen("1.txt","r"))==NULL)
{
printf("can't open the file\n");
exit(-1);
}
while(!feof(fp))
{
c=zf(fp);
i=searchHash(c.b);
if(i=-1)
insertHash(c.b);
}
display();
}
/*************************************/
string zf(FILE *fp)
{
string q,p;
char c,a[100];
int i=0,fale=0;
p.b[0]='\0';
if(!feof(fp))
{
q.b[i]=fgetc(fp);
if(q.b[i]==' '||q.b[i]=='\n')
{
if(feof(fp)) return p;
else while((c=fgetc(fp))==' '||c=='\n'||c=='\r'||c=='\0');
q.b[i]=c;
}
switch(q.b[i])
{
case '#':case ';':case '?':case '\'':case '"':
case ':':case '(':case ')':case '[': case ']':
case '{':case '}':break;
case '/':if(feof(fp)) return p;
else if((c=fgetc(fp))=='*')
{
q.b[++i]=c;
if(feof(fp)) return p;
while(c=fgetc(fp))
{
if(c=='*')
if((c=fgetc(fp))=='/')
{
fseek(fp,-2,1);
break;
}
else fseek(fp,-1,1);
}
break;
}
else if(c=='/')
{
q.b[++i]=c;
fgets(a,99,fp);
break;
}
else {fseek(fp,-1,1);break;}
case '+':if(feof(fp)) return p;
else if((c=fgetc(fp))=='=')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '-':if(feof(fp)) return p;
else if((c=fgetc(fp))=='=')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '*':if(feof(fp)) return p;
else if((c=fgetc(fp))=='=')
{
q.b[++i]=c;
break;
}
else if(c=='/')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '!':if(feof(fp)) return p;
else if((c=fgetc(fp))=='=')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '|':if(feof(fp)) return p;
else if((c=fgetc(fp))=='|')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '&':if(feof(fp)) return p;
else if((c=fgetc(fp))=='&')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '%':if(feof(fp)) return p;
else if((c=fgetc(fp))=='d')
{
q.b[++i]=c;
break;
}
if(c=='f')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '<':if(feof(fp)) return p;
else if((c=fgetc(fp))=='=')
{
q.b[++i]=c;
break;
}
if(c=='<')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case '>':if(feof(fp)) return p;
else if((c=fgetc(fp))=='=')
{
q.b[++i]=c;
break;
}
if(c=='>')
{
q.b[++i]=c;
break;
}
else {fseek(fp,-1,1);break;}
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p':
case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V':
case 'W': case 'X': case 'Y': case 'Z': case '_':
while(!feof(fp))
{
c=fgetc(fp);
switch(c)
{
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p':
case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V':
case 'W': case 'X': case 'Y': case 'Z': case '_': case '0': case '1': case '2':
case '3': case '4': case '5': case '6': case '7': case '8': case '9': q.b[++i]=c;break;
default : fseek(fp,-1,1);fale=1;break;
}
if(fale==1) break;
}
if(feof(fp)) return p;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
while(!feof(fp))
{
c=fgetc(fp);
switch(c)
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6':
case '7': case '8': case '9': q.b[++i]=c;break;
default : fseek(fp,-1,1);fale=1;break;
}
if(fale==1) break;
}
if(feof(fp)) return p;
}
q.b[i+1]='\0';
return q;
}
else return p;
}
/***********************************************/
void creatHash()/*根表的初始化*/
{
int i;
for(i=0;i<SIZE;i++)
{
hash[i].ip=-1;
hash[i].link=NULL;
}
}
//****************************************************
int h(char *p)/*求hash函數的值&&&&&&&&&&&&&&&&&&&&*/
{
int i;
char a[1];
for(i=0;i<MAX;i++)
if(strcmp(token[i],p)==0) {return i+1;break;}
a[0]=*p;
switch(a[0])
{case 'a': case 'b': case 'c': case 'd':
case 'e': case 'f': case 'g': case 'h':
case 'i': case 'j': case 'k': case 'l':
case 'm': case 'n': case 'o': case 'p':
case 'q': case 'r': case 's': case 't':
case 'u': case 'v': case 'w': case 'x':
case 'y': case 'z': return a[0]-63;break;
case 'A': case 'B': case 'C': case 'D':
case 'E': case 'F': case 'G': case 'H':
case 'I': case 'J': case 'K': case 'L':
case 'M': case 'N': case 'O': case 'P':
case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X':
case 'Y': case 'Z': return a[0]-5;break;
case '_': return 86;break;
case '+': if(*(p+1)=='+')return 87;
else if(*(p+1)=='=') return 88;
else return 89; break;
case '-': if(*(p+1)=='-')return 90;
else if(*(p+1)=='=') return 91;
else return 92; break;
case '*': if(*(p+1)=='=') return 93;
else if(*(p+1)=='/')return 95;
else return 94; break;
case '/':if(*(p+1)=='*')return 95;
else return 96;break;
case '>':if(*(p+1)=='=') return 97;
else if(*(p+1)=='>')return 98;
else return 99;break;
case '<':if(*(p+1)=='=') return 100;
else if(*(p+1)=='<')return 101;
else return 102;break;
case '(':return 103;break; case ')':return 104;break; case ':':return 105;break;
case '#':return 124;break; case '.':return 125;break; case '{':return 126;break;
case '}':return 127;break; case '[':return 128;break; case ']':return 129;break;
case '"':return 130;break; case '\'':return 131;break;case ';':return 132;break;
case '!':if(*(p+1)=='=')return 106;
else return 107;break;
case '|':if(*(p+1)=='|')return 108;
else return 109;break;
case '&':if(*(p+1)=='&')return 110;
else return 110;break;
case '%':if(*(p+1)=='d')return 111;
else if(*(p+1)=='f')return 112;
else return 113;break;
case '0':case '1':case '2':case '3':case '4':case '5':case '6':
case '7':case '8':case '9':return a[0]+66;break;
default : {printf("is not biao zi fu\n");return -1;}
}
}
//*************************************************
int zhifutype(char *p)/*找字符串的類型*/
{
int pi,i;
char c;
for(i=0;i<MAX;i++)
if((strcmp(p,token[i]))==0)
{pi=1; break;}
if(i>=MAX)
{
c=*p;
switch(c)
{
case '0':case '1':case '2':case '3':case '4':case '5':case '6':
case '7':case '8':case '9':pi=3;break;
case '+':case '>':case '<':case '=':case '#':case '(':
case ')':case '{':case '}':case '[':case ']':
case '%':case '&':case '|':case '?':case '!':pi=4;break;
case '-':c=*(p+1);
if(c=='>')pi=5;
else pi=4; break;
case '/':c=*(p+1);
if(c=='*')pi=5;
else pi=4; break;
case '*':c=*(p+1);
if(c=='/')pi=5;
else pi=4; break;
case ';':case '"':case ',':case ':':case '.':case '\'': pi=6;break;
default : pi=2;
}
}
return pi;
}
//*********************************************
int searchHash(char *p)/*hash表的查找*/
{
int potion,xp;
potion=h(p);
printf("位置為:%d\n",potion);
xp=zhifutype(p);
if(hash[potion].link==NULL)
{
printf("hash表中沒有\n");
return -1;
}
else
{
struct node *x;
x=hash[potion].link;
while(x->next!=NULL&&(strcmp(x->data,p)!=0))
x=x->next;
if(strcmp(x->data,p)==0)
{
printf("hash表中有\n");
return 0;
}
else
{
printf("hash表中沒有\n");
return -1;
}
}
}
//********************************************
void insertHash(char *p)/*hash表的創建及解決沖突*/
{
int potion,xp;
struct node *q;
q=(struct node *)malloc(sizeof(struct node));
strcpy(q->data,p);
q->next=NULL;
potion=h(p);
xp=zhifutype(p);
if(hash[potion].link==NULL)
{
hash[potion].ip=xp;
hash[potion].link=q;
printf("%s插入表中了\n",p);
}
else
{
struct node *x;
x=hash[potion].link;
while(x->next!=NULL)x=x->next;
x->next=q;
printf("%s插入表中了\n",p);
}
}
/************************************/
void display()
{
int i;
struct node *x;
for(i=0;i<SIZE;i++)
{
x=hash[i].link;
while(x!=NULL)
{
printf("(%d,%s)",hash[i].ip,x->data);
x=x->next;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -