#include
"stdio.h"
#include
"stdlib.h"
#include
"string.h"
#include
"ctype.h"
#define
ROWS
256
#define
COLS
32
static
FILE
*fp;
static
char
a[ROWS][COLS];
char
get_option(void);
int
b(int
count);
void
c(char
*pt[],
int
count);
int
check(char
arr[],
int
count);
void
storage(char
*pt[],
int
count);
int
main(void)
{
int
i,count;
int
start;
char
*pt[ROWS];
char
ch,
len;
char
input;
if((fp=fopen("words.txt","a+"))==NULL)
{
fputs("不能打开或建立文件!\n",stderr);
exit(1);
}
fseek(fp,0L,SEEK_END);
start=(int)ftell(fp)/32;
count=start;
rewind(fp);
if(fread(a,32*sizeof(char),start,fp)==0)
{
i=0;
puts("请输入单词(每行一个),在新行输入END结束输入:");
while(i<ROWS&&scanf("%s",
a[i])==1)
{
fflush(stdin);
if(strncmp(a[i],"END",3)==0)
{
count+=i;
break;
}
if(check(a[i],
i))
continue;
i++;
}
}
puts("您要做些什么?");
puts("a.
显示已有的单词
b.
添加新单词");
puts("c.
对已有的单词进行排序
d.
退出");
while((input=get_option())!='d')
{
if(input=='a')
{
puts("已有的单词:");
for(i=0;i<count;i++)
{
printf("
");
puts(a[i]);
}
}
if(input=='b')
{
puts("请输入新的单词(每行一个),在新行输入END结束输入:
");
count=b(count);
}
if(input=='c')
{
puts("对单词进行排序:");
c(pt,
count);
for(i=0;i<count;i++)
{
printf("
");
puts(pt[i]);
}
}
puts("还要做些什么?");
}
storage(pt,count);
fclose(fp);
puts("再见!");
return
0;
}
char
get_option(void)
{
char
ch;
while((ch=getchar())<'a'||ch>'d')
{
while((ch=getchar())!='\n')
puts("请输入a,b,c或者d.");
}
fflush(stdin);
return
ch;
}
int
b(int
count)
{
int
i;
i=count;
while(i<ROWS&&scanf("%s",
a[i])==1)
{
fflush(stdin);
if(check(a[i],
i))
continue;
if(strncmp(a[i],"END",3)==0)
{
count=i;
break;
}
i++;
}
return
count;
}
void
c(char
*pt[],
int
count)
{
int
i,j;
char
*temp;
for(i=0;i<ROWS;i++)
pt[i]=a[i];
for(i=0;i<count;i++)
for(j=i+1;j<count;j++)
{
if(strcmp(pt[i],pt[j])>0)
{
temp=pt[i];
pt[i]=pt[j];
pt[j]=temp;
}
}
}
int
check(char
arr[],
int
count)
{
int
i;
int
flag=0;
for(i=0;i<strlen(arr);i++)
if(isalpha(arr[i])==0)
{
printf("%s不是一个单词.\n",arr);
flag=1;
break;
}
for(i=0;i<count;i++)
if(strncmp(a[i],a[count],strlen(a[count])+1)==0)
{
puts("重复的单词!");
flag=1;
}
return
flag;
}
void
storage(char
*pt[],
int
count)
{
int
i,j;
char
ptr[ROWS][COLS];
c(pt,
count);
for(i=0;i<count;i++)
for(j=0;pt[i][j]!='\0';j++)
ptr[i][j]=pt[i][j];
fp=fopen("words.txt","w+");
rewind(fp);
fwrite(ptr,32*sizeof(char),count,fp);
}