文本文件单词的检索与计数_第1页
文本文件单词的检索与计数_第2页
文本文件单词的检索与计数_第3页
文本文件单词的检索与计数_第4页
文本文件单词的检索与计数_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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<stdio.h>#include<string.h>#include<stdlib.h>#include<color.h>#def

5、ine MAX_FIND_WORD_LENGTH 60/查能找的单词最大长度#define MAX_FIND_WORD_NUM_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(vo

6、id);void colordispaly(void);int getWordLocate(void);int main(void)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 men

7、u_select(void)int choice;char str40;printf("1.打开文件t2.统计单词个数t3.定位单词t4.打印文件t0.推出程序n");scanf("%d", &choice);if(choice > -1 && choice < 5)return choice;elseprintf("输入有误!请重新输入n");gets(str);/读掉缓冲区内容return -1;int openFile(void)char fileNameMAX_FIND_WORD_LENGT

8、H;printf("你输入你要打开的文件路径或文件名n");scanf("%s", fileName);printf("%s", fileName);fp = fopen(fileName, "r");if(!fp)printf("打开文件失败!n");return -1;elseprintf("打开文件成功!n");return 0;int display(void)char ch;int line = 0;rewind(fp);printf("%-2d: &qu

9、ot;, +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);printf("请输入你要查找的单词:n&q

10、uot;);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 colordi

11、splay(void)char ch, 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: "

12、, +line);elseif(locationlineindex = j + 1)/当前要打印的字符即为查找词首字母index+;flag = '1'BLACK_RED;printf("%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

13、 < MAX_FIND_WORD_NUM_PER_LINE; j+)if(locationij != 0)printf("第%d行第%d位置找到n", i, locationij);*/*函数名称:计算查找词位置。函数描叙:存放在location数组里,并计算是否查找到isfind。f(line)=(line / (strlen(findWord) / 2 + 1) + 1);读到n字符个数line与行数的关系。*/int getWordLocate(void)int index = 0, preline;/第index位置上找到字符int len, i = 0, j

14、 = 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_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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论