logo - 刷刷题
下载APP
【简答题】

【说明】 本程序从正文文件text.in中读入一篇英文短文,统计该短文中不同单词及出现次数,并按词典编辑顺序将单词及出现次数输出到正文文件word.out中。 程序用一棵有序二叉树存储这些单词及其出现的次数,边读入边建立,然后中序遍历该二叉树,将遍历经过的二叉树上的结点内容输出。 【函数】 # include <stdio.h> # include <malloc.h> # include <ctype.h> # include <string.h> # define INF "text.in" # define OUTF "word.our’ typedef struct treenode { char *word; int count; struct treenode *left, *right; } BNODE; int getword(FILE *fpt, char *word) { char c; c=fgetc(tpt); if (c==EOF) return 0; while(!(tolower(c)>= ’a’ && tolower(c)<= ’z’)) { c=fgetc(fpt); if (c==EOF) return 0; } /* 跳过单词间的所有非字母字符 */ while(tolower(c)>= ’a’ && tolower(c)<= ’z’) { *word++=c; c=fgetc(fpt);  } *word=’\0’; return 1; } void binary_tree(BNODE **t, char *word) { BNODE *ptr, *p; int compres; p=NULL; (1) ; while (ptr) /* 寻找插入位置 */ { compres=strcmp(word, ptr->word);/* 保存当前比较结果 */ if (!compres) { (2) ; return;} else { p=ptr; ptr=compres>0 ptr->right: ptr->left;   } } ptr=(BNODE *)malloc(sizeof(BNODE)); ptr->left=ptr->right=NULL; ptr->word=(char *)malloc(strlen(word)+1); strcpy(ptr->word, word); (3) ; if (p==NULL) *t=ptr; else if (compres>0) p->right=ptr; else p->left=ptr; } void midorder(FILE *fpt, BNODE *t) { if (t==NULL) return; midorder(fpt, (4) ); fprintf(fpt, "%s %d\n", t->word, t->count); midorder(fpt, t->right); } void main() { FILE *fpt; char word[40]; BNODE *root=NULL; if ((fpt=fopen(INF, "r"))==NULL) { printf("Can’t open file %s\n", INF); return; } while(getword(fpt, word)==1) binary_tree( (5) ); fclose(fpt); fpt=fopen(OUTF, "w"); if (fpt==NULL) { printf("Can’t open fife %s\n", OUTF); return; } midorder(fpt, root); fclose(fpt); }

举报
参考答案:
参考解析:
.
刷刷题刷刷变学霸
举一反三