该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#include
struct zf{//单词链表结构
char word[50];
unsigned int num_word;
struct zf* next;
};
struct word_init{//单词总表
struct zf *lett[26];
}wordinit;
void delay(){//延时函数
long int num;
num=clock();
while((long int)clock()-num<=1000);
}
int main(int argc, char *argv[])
{
FILE *fp;
char fileadr[100],wordtemp[50];
char init_num='A';
int for_num=0;
struct zf *head,*q,*p;
while(1)//读取文件位置
{
printf("\t\t请在输入地址或直接将文件拖入对话框后按下回车:\n\t\t");
gets(fileadr);
if((fp=fopen(fileadr,"r"))==NULL){
printf("\t\t文件地址格式错误,请重新输入\n\t\t");
delay();
system("cls");
}else
break;
}
head=p=q=(struct zf*)malloc(sizeof(struct zf));
p->next='\0';
while(init_num<='Z'){//链表主结构,从A到Z
wordinit.lett[init_num-'A']=p;
p->word[0]=init_num;
p->word[1]='\0';
p->num_word=-1;
p->next=(struct zf*)malloc(sizeof(struct zf));
p=p->next;
p->next='\0';
init_num++;
}
struct zf *newadd;
while(!feof(fp)){//单词读取
int for_num=0;
char lettemp='\0';
for(;for_num<50&&(lettemp=fgetc(fp))!=EOF;for_num++){
if(lettemp>='A'&&lettemp<='Z'){
lettemp+=32;
wordtemp[for_num]=lettemp;
}else if(lettemp>='a'&&lettemp<='z'||lettemp=='-'){
wordtemp[for_num]=lettemp;
}else if(lettemp>='0'&&lettemp<='9'){
continue;
}else if(for_num==0){
for_num--;
}else if(for_num>0){
wordtemp[for_num]='\0';
break;
}
}
q=p=wordinit.lett[wordtemp[0]-'a'];
do{//单词数统计与增添链表内容
q=p;
p=p->next;
if(strcmp(p->word,wordtemp)==0){
p->num_word++;
break;
}else if(p->word[0]==wordtemp[0]-32+1&&p!='\0'){
newadd=(struct zf *)malloc(sizeof(struct zf));
q->next=newadd;
strcpy(newadd->word,wordtemp);
newadd->num_word=1;
newadd->next=p;
break;
}
}while(p!=wordinit.lett[wordtemp[0]-'a'+1]);
}
p=head;
if(fp=fopen("F:\\.txt","w+"))//文件输出
do{
fprintf(fp,"%s\t\t%d\n",p->word,p->num_word);
printf("\t\t%s\t\t%d\n",p->word,p->num_word);
p=p->next;
}while(p->next!='\0');
printf("单词统计结束,谢谢使用=_=");
exit(0);
}