首页 > 代码库 > 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解答
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。