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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1需求分析

1.1 建立文本文件

建立文本文件的实现思路

(1)定义一个串变量

(2)定义文本文件

(3)输入文件名,打开该文件

(4)循环读入文本行,写入文本文件,其过程如下:

While(不是文件输入结束){

读入一文本行至串变量;

串变量写入文件;

输入是否结束输入标志;

}

(5)关闭文件

1.2给定单词的计数

该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。

1.3 检索单词出现在文本文件中的行号、次数及其位置

1.4 主控菜单程序的结构

(1)头文件包含

(2)菜单选择包括:

1、建立文件

2、单词计数

3、单词定位

4、退出程序

(3)选择1~4执行相应的操作,其他字符为非法

2.概要设计

2.流程图

2.1建立文本文件

定义一个串变量,定义文本文件,输入文件名,打开该文件,循环读入文本行,写入文本文件,关闭文件。

建立文本文件的思路过程

2.2给定单词的计数

逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词的次数。

给定单词计数的过程

2.3检索单词出现在文本文件中的行号、次数及其位置

逐行扫描文本文件。扫描一个单词,单词数加1,匹配一个,计数器加1,输出该单词

数,行数到底

以此,行数加1,单词数清零,直到整个文件扫描结束;然后输出单词的次数,行号,第几个单词。

检索单词的出现在文本文件中的行号,次数以及位置

3详细设计

主代码

#include

#include

#include

#define MaxStrSize 256 //根据用户需要自己定义大小

typedef struct {

char ch[MaxStrSize]; //ch是一个可容纳256个字符的字符数组

int length;

} SString;//定义顺序串类型

int PartPosition (SString s1,SString s2,int k)

{ int i,j;

i=k-1;

//扫描s1的下标,因为c中数组下标是从0开始,串中序号相差1 j=0;//扫描s2的开始下标

while(i

{if(s1.ch[i]==s2.ch[j])

{ i++;j++; //继续使下标移向下一个字符位置

}

else

{

i=i-j+1; j=0;

} }

if (j>=s2.length)

return i-s2.length;

else

return -1;//表示s1中不存在s2,返回-1

//表示s1中存在s2,返回其起始位置

} //函数结束

void CreatTextFile()

{

SString S;

char fname[10],yn;

FILE *fp;

printf("输入要建立的文件名:");

scanf("%s",fname);

fp=fopen(fname,"w");

yn='n';//输入结束标志初值

while(yn=='n'||yn=='N')

{

printf("请输入一行文本:");gets(S.ch);gets(S.ch);

S.length=strlen(S.ch);

fwrite(&S,S.length,1,fp);

fprintf(fp,"%c",10);//是输入换行

printf("结束输入吗?y or n :");yn=getchar();

}

fclose(fp);//关闭文件

printf("建立文件结束!");

}

void SubStrCount()

{

FILE *fp;

SString S,T;//定义两个串变量

char fname[10];

int i=0,j,k;

printf("输入文本文件名:");

scanf("%s",fname);

fp=fopen(fname,"r");

printf("输入要统计计数的单词:");

scanf(“%s”,T.ch);

T.length=strlen(T.ch);

while(!feof(fp)){ //扫描整个文本文件

// fread(&S.ch,1,sizeof(S),fp);//读入一行文本

memset(S.ch,'\0',256);

fgets(S.ch,100,fp);

S.length=strlen(S.ch);

k=0; //初始化开始检索位置

while(k

{

j=PartPosition(S,T,k);//调用串匹配函数

if(j<0 ) break;

else {

i++;//单词计数器加1

k=j+T.length;//继续下一字串的检索

相关文档
最新文档