【求助】在设计一个【单词统计】程序上遇到了困难,求大神们帮助一下小弟
最近学习了C语言,老师让我们设计一个统计一个英文文本里的某些单词数量,但是本人比较渣,设计的程序不完善,比如当输入if 时,统计的个数是正确的,但是如果if 和 i 一起输入的话,或者输入wonder和wonderful时,else和el时统计的个数就会出错,这是什么回事呢,求大神帮我完善一下程序。。。题目是这样的:a) 单词统计
【问题描述】统计某篇英文小说中某些单词的出现次数。
【实现提示】英文小说存储在一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后全部完成。输出的每个单词的出现次数。约定小说中的词汇一律不跨行,这样每从文本文件中读入一行,就统计每个单词在这行中出现的次数,直到文件结束。
要求在程序运行时才输入文本文件名和要统计的词汇。
以下是我设计的程序:
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int comp(char text[], char key[])
{
int i, j, res;
int flag;
res = i =j = 0;
while(text[j] != '\0')
{
while (!(text[j] <= 'z' &&text[j] >='a')|| (text[j] <='Z' &&text[j] >= 'A'))
j++;
flag = 1;
i = 0;
while(key[i] != '\0' && flag == 1)
{
if (key[i] != text[j + i])
flag = 0;
i++;
}
if (flag && !(text[j+i] <= 'z' && text[j+i] >='a') || (text[j+i] <='Z' && text[j+i] >='A'))
{
res++;
}
while((text[j] <= 'z' && text[j] >='a') || (text[j] <='Z' && text[j] >='A'))
j++;
}
return res;
}
int main()
{
FILE *fp1;
int ans[1024],i,k;
char text[1024], key[512][1024],root[1024];
memset(ans,0,sizeof(ans));
printf("Please input the root ofyour file:");
scanf("%s", root);
fp1 = fopen(root,"r");//C:\\Users\\LonG\\Desktop\\a.txt
printf("Please input the numberof the words that you want to check:");
scanf("%d", &i);
for(k = 0; k < i; k++)
{
scanf("%s",key[k]);
}
while(fgets(text,1024,fp1)!=NULL)
{
for(k =0;k < i;k++)
{
ans[k] += comp(text,key[k]);
}
}
for(k =0; k < i; k++)
{
printf("%s : %d \n",key[k], ans[k]);
}
scanf("%s", key[0]);
fclose(fp1);
return 0;
}[ 本帖最后由 boboxing 于 2013-11-6 10:40 编辑 ]








