文本文件单词的检索与计数.doc

上传人:scccc 文档编号:13517638 上传时间:2022-01-14 格式:DOC 页数:9 大小:120KB
返回 下载 相关 举报
文本文件单词的检索与计数.doc_第1页
第1页 / 共9页
文本文件单词的检索与计数.doc_第2页
第2页 / 共9页
文本文件单词的检索与计数.doc_第3页
第3页 / 共9页
文本文件单词的检索与计数.doc_第4页
第4页 / 共9页
文本文件单词的检索与计数.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《文本文件单词的检索与计数.doc》由会员分享,可在线阅读,更多相关《文本文件单词的检索与计数.doc(9页珍藏版)》请在三一文库上搜索。

1、文本文件单词的检索与计数 设计题目: 文本文件单词的检索与计数 班 级 : 计科一班 学 号 : 完成日期: 2013/03/28 文本文件单词的检索与计数实验目的和要求1. 实践用字符串解决具有一定规模的问题的方法和编程思路;2. 掌握文件的操作方法;3. 编写实验报告;实验内容要求编程建立一文本文件,每个单词不含空格且不跨行,单词由字符序列构成且区分大小写,统计给定单词在文本文件中出现的总次数,检索输出某个单词出现在文本中的行号、在该行中出现的次数及位置。实验步骤1、 问题分析该设计分三个部分实现:一, 建立文本文件,文件名由用户键盘输入;二, 给定单词的计数,输入一个不含空格的单词,统计

2、输出该单词在文本中的出现次数;三, 检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数及在该行中的相应位置。2、 系统设计l 设计菜单内容程序运行后、给出菜单项的内容和输入提示:1、 建立文本文件;2、 单词子串的计数;3、 单词子串的定位;4、 退出整个程序;请选择1-4:l 建立文本文件函数n 实现思路1) 定义一个串变量;2) 定义文本文件;3) 输入文件名,打开该文件;4) 循环读入文本行,写入文本文件While(不是文件输入结束) 读入一文本行到串变量; 串变量写入文件; 输入是否结束(输入标志);5) 关闭文件;n 函数名 void CreatTextFile

3、()l 文本文件单词计数函数n 实现思路1) 输入要检索的文件名,打开相应的文件;2) 输入要检索统计的单词;3) 循环读入文本文件,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。While(不是文件结束) 读入一行到串中; 求出串长度; 模式匹配函数计数;4) 关闭文件,输出统计结果;n 函数名 void SubStrCount();l 检索单词出现在文本文件中的行号、位置及在该行中出现的次数函数n 实现思路1) 输入要检索的文件名,打开相应的文件;2) 输入要检索统计的单词;3) 行计数器初值置0;4)While(不是文件结束) 读入一行到指定串中; 求出串长

4、度;行计数置初值; 调用模式匹配函数匹配单词定位、该行匹配单词计数; 行计数器+1; If(行计数器!=0) 输出行号、该行有匹配单词的个数及相应位置;n 函数名void SubStrInd()3、 完整的程序清单/*程序名称:单词统计和定位程序程序描叙:程序实现四个功能,打开文件,统计单词,定位单词,打印文件内容。用到文件指针的移动、字符串比较、函数分析及建立。 檀国林时间:2013-03-28*/#include#include#include#include#define MAX_FIND_WORD_LENGTH 60/查能找的单词最大长度#define MAX_FIND_WORD_NU

5、M_PER_LINE 15/每行最多存在要查找的单词个数#define MAX_LINE 200/最多有这么多行FILE * fp;char findWordMAX_FIND_WORD_LENGTH;/要查找的单词int isfind, locationMAX_LINEMAX_FIND_WORD_NUM_PER_LINE;int menu_select(void);int openFile(void);int display(void);int getWordNum(void);void colordispaly(void);int getWordLocate(void);int main(v

6、oid)int flag = 1;while(flag)switch(menu_select()case 1: openFile();break;case 2: getWordNum();break;case 3: getWordLocate();break;case 4: display();break;case 0:fclose(fp);flag = 0;printf(再见!n);break;default :;return 0;int menu_select(void)int choice;char str40;printf(1.打开文件t2.统计单词个数t3.定位单词t4.打印文件t0

7、.推出程序n);scanf(%d, &choice);if(choice -1 & choice 5)return choice;elseprintf(输入有误!请重新输入n);gets(str);/读掉缓冲区内容return -1;int openFile(void)char fileNameMAX_FIND_WORD_LENGTH;printf(你输入你要打开的文件路径或文件名n);scanf(%s, fileName);printf(%s, fileName);fp = fopen(fileName, r);if(!fp)printf(打开文件失败!n);return -1;elsepr

8、intf(打开文件成功!n);return 0;int display(void)char ch;int line = 0;rewind(fp);printf(%-2d: , +line);while(ch = fgetc(fp) != EOF)if(ch = n)printf(n);printf(%-2d: , +line);elseprintf(%c, ch);printf(n);return 0;int getWordNum(void)int len, i = 0, sum = 0;char ch, findResultMAX_FIND_WORD_LENGTH;rewind(fp);pr

9、intf(请输入你要查找的单词:n);scanf(%s, findWord);len = strlen(findWord);while(ch = fgetc(fp) != EOF)findResulti = ch;i+;if(i = len)findResulti = 0;if(strcmp(findWord, findResult) = 0)sum+;fseek(fp, -(len - 1), 1);i = 0;printf(单词%s有%d个n, findWord, sum);return 0;/根据location数组彩色打印void colordisplay(void)char ch,

10、flag = 0;int j = 0, line = 0, index = 0, num = 0, len = strlen(findWord);if(!isfind)printf(没有找到!n);elserewind(fp);printf(%-2d: , +line);while(ch = fgetc(fp) != EOF)if(ch = n)j = 0;index = 0;printf(n);printf(%-2d: , +line);elseif(locationlineindex = j + 1)/当前要打印的字符即为查找词首字母index+;flag = 1;BLACK_RED;pr

11、intf(%c, ch);elseprintf(%c, ch);if(flag = 1)num+;if(num = len)BLACK_WHITE;num = 0;flag = 0;j+;printf(n);/*for(i = 0; i MAX_LINE; i+)for(j = 0; j MAX_FIND_WORD_NUM_PER_LINE; j+)if(locationij != 0)printf(第%d行第%d位置找到n, i, locationij);*/*函数名称:计算查找词位置。函数描叙:存放在location数组里,并计算是否查找到isfind。f(line)=(line / (s

12、trlen(findWord) / 2 + 1) + 1);读到n字符个数line与行数的关系。*/int getWordLocate(void)int index = 0, preline;/第index位置上找到字符int len, i = 0, j = 0, line = 0;/第line行第j个字符找到要查找的findWordchar ch, findResultMAX_FIND_WORD_LENGTH;rewind(fp);printf(请输入你要查找的单词:n);scanf(%s, findWord);len = strlen(findWord);for(i = 0; i MAX_

13、LINE; i+)for(j = 0; j MAX_FIND_WORD_NUM_PER_LINE; j+)locationij = 0;i = j = isfind = 0;while(ch = fgetc(fp) != EOF)findResulti = ch;i+;if(ch = n)line+;j = 0;if(i = len)findResulti = 0;if(strcmp(findWord, findResult) = 0)isfind = 1; /查找到if(preline != (line / (strlen(findWord) / 2 + 1) + 1) /读到下一行则索引重0开始index = 0;locationline / (strlen(findWord) / 2 + 1) + 1index = j;/保存找到的位置index+;preline = line / (strlen(findWord) / 2 + 1) + 1;fseek(fp, -(len - 1), 1); /文件指针前移j+;i = 0;colordisplay();return 1;4、 程序运行测试

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1