10815 - Andy's First Dictionary解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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解答的主要内容,如果未能解决你的问题,请参考以下文章

Uva 10815-Andy&#39;s First Dictionary(串)

10815 - Andy's First Dictionary解答

UVA - 10815 Andy's First Dictionary

安迪的第一个字典 Andy's First Dictionary, UVa 10815

UVa10815 Andy's First Dictionary (STL)

uva 10815,andy's first ditionary(set,stringstream的简单运用)