码迷,mamicode.com
首页 > 其他好文 > 详细

10815 - Andy's First Dictionary解答

时间:2016-09-03 12:04:11      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

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

#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解答

标签:

原文地址:http://www.cnblogs.com/lzq031/p/5836518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!