这个程序是统计英文词频的,标点符号不予统计,不含标点,假设最长的单词是18个字节。填八个空,大家帮帮忙吧!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct WordItem{①;int freq;}
struct Node{struct WordItem data;②}
void ToLower(char word[]);/*已有定义*/
struct Node *NewWord(struct Node *p,char *w);/*已有定义*/
int AddWord(struct Node *words[],char *w);/*定义见后*/
void main()
{
int i;char w[20];
struct Node *words[26],*p;}
FIFE *fp,*out;
for(i=0;i<26;i++)③;
fp=fopen("test.txt","rt");
out=fopen("testwors.txt","wt");
if(!fp||!out){
print("can not open or create file\n");
return;
}
while(fscanf(fp,"%s",w)!=EOF)
AddWord(words,w);
fclose(fp);
for④
fclose(out);
}
int AddWord(struct Node *words[],char *w)
{
int i;
struct Node *p,*prev;
ToLower(w);
i=⑤;
if(i<0||i>=26)return 0;
if(words[i]==NULL){
words[i]=⑥;
return words[i]!=NULL;
}
p=words[i];
while(!=NULL){
if(⑦){
p->data.freq++;
return 1;
}
prev=p;
p=p->next;
}
prev->next=NewWord(prev->next,w);
return ⑧;
}
以下是各个填空的提示:
①补写数据项:英文单词的字符数组表示;
②补写数据项:指向下一个单词的指针;
③对链表数组中的每个指针进行初始化;
④将每个单词及其词频输出到out,每个词条占一行;
⑤对i进行赋值,i表示单词w应该放到哪个链表中;
⑥调用NewWord函数;
⑦写出“找到了w”的判断条件;
⑧给出函数的返回值
回答楼下的疑问,p后面的}是不小心打上去的
while(!=NULL)应该是while(p!=NULL)
是我打错了,呵呵
还有,这不是我编的,而是研究生考试的专业课试题