需求分析:给出一篇英文文章,要求提取单词,并统计每个单词出现地次数
分析:也就是连续地字母要提取出来,作为一个单词,比如 it's 就需要提取出 it s 两个单词
实现:我的想法是首先用fscanf()函数将文章中连在一起地提取出来,类似 ok. cs@cbhs, hi! 这些,然后进行过滤,将这个整体地非字母替换成空格,然后将他写入一个临时文件,再从这个临时文件中读取,就达到了分解地目的;
部分代码
//读取、过滤、写入临时文件
void readFile(char *path){
FILE *ori = fopen(path,"r");
FILE *tempFile = fopen("tempFile.txt","w");
char temp[1024];
while(!feof(fp)){
fscanf(ori,"%s",temp);
for(int i = 0; i < strlen(temp); i++){
if(!isLetter(temp[i])){
temp[i] = ' ';
}
}
fprintf(tempFile,"%s\n",temp);
}
}
注意,如果再次读取这个临时文件,也是采用fscaf()会存在一个bug,就是如果最后地是空行,会将上一行的内容拿过来,导致最后一行的误读,我的建议是写一个退格符,也就是 fprintf(tempFile,"\b"); 就可以解决这个问题。