📄 5-4-2.c
字号:
/*中国系统分析员顾问团,http://www.csai.cn*/
/*程序员下午考试指南书籍源码*/
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#define INF "TEXT.IN"
#define OUTF "WORD.OUT"
typedef struct treenode {
char *word;
int count;
struct treenode *left, *right;
}BNODE;
int getword(FILE *fpt,char *word)//原题没有此函数的实现部分
{ char temp,*w;
int k=0;
w=word;
while(fscanf(fpt,"%c",&temp)==1){
if (temp==' ')break;
*word++=temp;
k=1;
}
if (k) {*word='\0';return 1;}
return 0;
}
void binary_tree(BNODE **t,char *word){
BNODE *ptr, *p; int cmpres;
p = NULL; ptr = *t;
while (ptr) {/*寻找插入位置*/
cmpres = strcmp( word ,ptr->word); /* 保存当前比较结果 */
if (!cmpres) {
ptr->count++ ;
return;
}
else {
p = ptr;
ptr = cmpres > 0 ? ptr->right : ptr->left;
}
}
ptr = (BNODE *)malloc(sizeof(BNODE));
ptr->right = ptr->left = NULL;
ptr->word = (char *)malloc(strlen(word)+1);
strcpy(ptr->word,word ); ptr->count = 1;
if (p == NULL)*t = ptr;
else if (cmpres > 0) p->right = ptr;
else p->left = ptr;
}
void midorder(FILE *fpt, BNODE *t){
if (t == NULL) return;
midorder( fpt, t->left);
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(&root,word);
fclose(fpt);
fpt = fopen(OUTF,"w");
midorder(fpt, root);
fclose(fpt);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -