文章编辑
功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;
要求
(1)分别统计出其中英文字母数和空格数及整篇文章总字数;
(2)统计某一字符串在文章中出现的次数,并输出该次数;
要求统计给定单词在文本中出现的总次数,并检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。
(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:
(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
3.1.1 项目简介
给定一个文本文件,要求统计给定单词在文本中出现的总次数,并检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。
3.1.2 设计思路
本项目的设计要求可以分为三个部分实现:其一,建立一个文本文件,文件名由用户用键盘输入;其二,给定单词计数,输入一个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词,输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的相应位置。
1. 建立文件的实现思路是:
(1) 定义一个串变量;
(2) 定义文本文件;
(3) 输入文件名,打开该文件;
(4) 循环读入文本行,写入文本文件,其过程如下:
while(不是文件输入结束){
读入一文本行至串变量;
串变量写入文件;
输入是否结束输入标志;
}
(5) 关闭文件。
2. 给定单词计数的实现思路是:
该功能需要用到模式匹配算法,逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词出现的次数。
串是非数值处理中的主要对象,如在信息检索、文本编辑、符号处理等许多领域,得到越来越广泛的应用。在串的基本操作中,在主串中查找模式串的模式匹配算法是文本处理中最常用、最重要的操作之一,称为模式匹配或串匹配,就是求子串在主串中首次出现的位置。朴素模式匹配算法的基本思路是将给定字串与主串从第一个字符开始比较,找到首次与子串完全匹配的子串为止,并记住该位置。但为了实现统计子串出现的个数,不仅需要从主串的第一个字符位置开始比较,而且需要从主串的任一位置检索匹配字符串。
其实现过程如下:
(1) 输入要检索的文本文件名,打开相应的文件;
(2) 输入要检索统计的单词;
(3) 循环读文本文件,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。具体描述如下:
while(不是文件结束){
读入一行并到串中;
求出串长度;
模式匹配函数计数;
}
(4) 关闭文件,输出统计结果。
3. 检索单词出现在文本文件中的行号、次数及其位置的实现思路是:
这个设计要求同上一个设计类似,但是要相对复杂一些。其实现过程描述如下:
(1) 输入要检索的文本文件名,打开相应的文件;
(2) 输入要检索统计的单词;
(3) 行计数器置初值0;
(4) while(不是文件结束){
读入一行到指定串中;
求出串长度;
行单词计数器0;
调用模式匹配函数匹配单词定位、该行匹配单词计数;
行号计数器加1;
if(行单词计数器!=0)输出行号、该行有匹配单词的个数以及相应的位置;
}
4. 主控菜单程序的结构
该部分内容如下:
(1) 头文件包含;
(2) 菜单选项包括:
1. 建立文件 或
2. 单词计数
3. 单词定位
4. 退出程序
(3) 选择1-4执行相应的操作,其他字符为非法。
3.1.3 数据结构
如果在程序设计语言中,串只是作为输入或输出的常量出现,则只需存储此串的串值,即字符序列即可.但在多数非数值处理的程序中,串也以变量的形式出现。串有三种机内表示方法:定长顺序存储表示、堆分配存储表示和串的块链存储表示。定长顺序存储表示类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。在串的定长顺序存储结构中,按照予定义的大小,为每个定义的串变量分配一个固定长度的存储区,则可用定长数组描述。
——串的定长顺序存储表示——
#define MAXSTRLEN 255 //用户可在255以内定义最大串长
typedef unsigned char SString [MAXSTRLEN+1]; //0号单元存放串的长度
串的实际长度可在这预定义长度的范围内随意,超过于定义长度的串值则被舍去,称之为"截断"。对串长有两种表示方法:一是如上述定义描述的那样,以下标为0的数组分量存放串的实际长度,如PASCAL语言中的串类型采用这种表示方法;二是在串值后面加一个不计入串长的结束标记字符,如在有的C语言中以"\0"表示串值的终结。此时的串长为隐含值,显然不便于进行某些串操作。在这种存储结构表示时实现串求子串操作如下:
求子串SubStrmg(&Sub,S,pos,len)过程即为复制字符序列的过程,将串S中从第pos个字符开始长度为len的字符序列复制到串Sub中。显然,本操作不会有需截断的情况,但有可能产生用户给出的参数不符合操作的初始条件,当参数非法时,返回ERROR。其算法描述如算法4.3所示。
StatusSub String (Sstring &Sub,Sstring S,int pos,int len){
//用Sub返回串s第pos个字符起长度为len的子串。其中1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1.
if(poss[0] || lenS[0]-pos+1) return ERROR;
Sub[1..len] = S[pos..pos+len-1];
Sub[0] =len;
return OK;
} //End of SubString
由此可见,在顺序存储结构中,实现串操作的原操作为“字符序列的复制”,操作的时间复杂度基于复制的字符序列的长度。
本项目主要实现子串的检索和定位操作,所以用定长顺序存储表示比较简单易行。
版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。