#include
#include
#include
#include
#include
int IsOneCharDifferent(char array[255]);
int IsIt(char array[255]);
int IsMoreOrLessOneChar(char array[255]);
//*************************************************************************************
//創建結構體鏈表保存每個單詞的序號、長度、以及鏈表所需的指針。即字典表的單詞數目無限。
//*************************************************************************************
typedef struct letters
{
char letter[255];
int num;
int lenth;
struct letters next;
}NODE;
NODE *head;
NODE *p;
//*********************************************************************************************
//load函數讀取系統文件
//**********************************************************************************************
void load()
{
FILE * fp;
fp=fopen("c:\Big Scary\課程設計\2_單詞匹配\letters.txt","r");
if((fp=fopen("c:\Big Scary\課程設計\2_單詞匹配\output.txt","r"))==NULL)
{
printf("不能打開文件\n");
return;
}
NODE *head;
head=(NODE *)malloc(sizeof(NODE));
NODE *p;
head->next=NULL;
while(!feof(fp))
{
p=(NODE *)malloc(sizeof(NODE));
fscanf(fp,"%s",&p->letter);
fscanf(fp,"%d",&p->num);
fscanf(fp,"%d",&p->lenth);
if(feof(fp))
{
free(p);
break;
}
p->next=head->next;
head->next=p;
}
fclose(fp);
}
//**********************************************************************************************
//int IsOneCharDifferent(char array[255])函數找出與輸入單詞相差一個字母的單詞序號。並賦值給Ei。
//**********************************************************************************************
int IsOneCharDifferent(char array[255])
{
load();
int num=0;
int len=strlen(array);
NODE ps=p;
for(;ps->next!=0;ps=ps->next)
{
if(p->lenth!=len)
{
return 0;
}
for(int c=0;clenth;c++)
if(p->letter!=array)
{
num++;
if(num>1)
return 0;
else
return p->num;
}
}
return 0;
}
//************************************************************************************************
//int IsMoreOrLessOneChar(char array[255])函數找出與輸入單詞多或者少一個字母的單詞序號。並賦值給Fi。
//*************************************************************************************************
int IsMoreOrLessOneChar(char array[255])
{
load();
int len=strlen(array);
NODE *ps=p;
for(;ps->next!=0;ps=ps->next)
{
if(p->lenth!=len)
{
return 0;
}
else if(p->lenth-len==1||len-p->lenth==1)
{
return(p->num);
}
else
return 0;
}
return 0;
}
//**********************************************************************************************
//int IsIt(char array[255])函數找出與輸入單詞完全相同的單詞序號。並賦值給i。
//**********************************************************************************************
int IsIt(char array[255])
{
load();
int len=strlen(array);
NODE *ps=p;
for(;ps->next!=0;ps=ps->next)
{
if(p->lenth!=len)
{
return 0;
}
if(strcmp(array,p->letter)==0)
{
return(p->num);
}
else
return 0;
}
return 0;
}
//*******************************************************************
//CharPiPei()函數進行單詞匹配操作。
//*******************************************************************
void CharPiPeiSave()
{
char array[255];
printf("請隨意輸入一個單詞:\n");
fflush(stdin);
gets(array);
IsIt(array);
IsOneCharDifferent(array);
IsMoreOrLessOneChar(array);
FILE * fp;
fp=fopen("c:\\Big Scary\\課程設計\\2_單詞匹配\\output.txt","w");
NODE *p=head->next;
int i=0,Ei=0,Fi=0;
i=IsIt(array);
Ei=IsOneCharDifferent(array);
Fi=IsMoreOrLessOneChar(array);
while(p!=0)
{
fprintf(fp,"i %d",i);
fprintf(fp,"Ei %d",Ei);
fprintf(fp,"Fi %d",Fi);
p=p->next;
}
fclose(fp);
}
//*******************************************************************************************
//menu函數提供三種操作,添加新單詞;單詞匹配;退出。用switch語句分別選擇調用3個函數進行操作
//*******************************************************************************************
void menu()
{
printf(" ┏━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf(" ┃ 歡迎使用字典表匹配單詞 ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ 1. 添加新單詞 ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ 2. 單詞匹配 ┃\n");
printf(" ┃ ┃\n");
printf(" ┃ 3. 退出程序 ┃ \n");
printf(" ┃ ┃\n");
printf(" ┗━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n");
printf("請選擇所要進行的項目:\n");
int select;
scanf("%d",&select);
switch(select)
{
case 1: ;
case 2: CharPiPeiSave();
case 3: ;
;}
}
//******************************************************
//調背景色彩
//******************************************************
void system()
{
system("color f5");
}
//******************************************************
//用main函數調用所需所有函數
//******************************************************
void main()
{
system();
menu();
}
首先,
struct letters next;
應該是
struct letters* next;