【求助】在设计一个【单词统计】程序上遇到了困难,求大神们帮助一下小弟
最近学习了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 编辑 ]