首页 > 代码库 > 10815 - Andy's First Dictionary解答

10815 - Andy's First Dictionary解答

采用数组链表的方式,来插入读入的单词,逐个字符读入单词。

#include <stdio.h>#define LEN 200#include <string>#include <string.h>#include <stdlib.h>struct node { char word[LEN]; struct node * next; };typedef struct node Word;int main(){ Word* Dict[30]; for(int k=0;k<30;k++){ Dict[k] = NULL; } Word *p,*pre,*w; char str[LEN]; char letter; int i=0; int flag=0; int ita=0; do{ if(scanf("%c",&letter)==EOF) break; letter = tolower(letter); if(letter>=a && letter<=z){ str[i++] = letter; flag=0; } else if(flag==1); else if(flag==0){ str[i] = \0;//形成一个字符串 flag=1; i=0; w = (Word *)malloc(sizeof(Word)); strcpy(w->word,str); w->next = NULL; if(Dict[str[0]-a]==NULL){// Dict[str[0]-a] = w; } else{ p = Dict[str[0]-a]; pre = NULL; while(p!=NULL){ if(strcmp(p->word,str)==0){//相等 break;//直接读下一个word } else if(strcmp(p->word,str)>0){//str小一些 if(pre==NULL){ Dict[str[0]-a] = w; w->next = p;} else{ pre->next = w; w->next = p;} break; } else{//str大 if(p->next==NULL)//如果是末尾了,说明是最大的 p->next = w; pre = p; p = p->next; } } } memset(str,0,sizeof(str)); } }while(letter!=EOF); for(int i=0;i<26;i++){ p = Dict[i]; while(1){ if(p!=NULL){ printf("%s\n",p->word); p = p->next; } else break; } } return 0;}

最开始没有这一句,而是直接使用scanf就会报错runtime error,应该是EOF没有正确读入。

  if(scanf("%c",&letter)==EOF) break;


 

10815 - Andy's First Dictionary解答