数结构实验报告
串应文学研究助手
专业班级: 电信班
时间:2011年X月X日
数结构实验报告
串应文学研究助手
问题描述
文学研究员需统计某篇英文说中某单词(特形容词)出现次数位置甚连数字标点符号数统计试写实现目标文字统计系统称文学研究助手
基求
1输入页文字静态存储页文章行超80字符N行
2分统计出中英文字母数空格数标点符号整篇文章总字数
3统计某字符串文章中出现次数输出该次数
4删某子串面字符前移
运拓展
1保存输入文章text文中
2模式匹配基KMP算法
3仿真友界面显示:
(1)求菜单选择操作分子函数实现相应功
(2)输入数形式范围:输入写写英文字母数
字标点符号
(3)输出形式:1)分行输出户输入行字符
2)分5行输出全部字母数数字数空格
数标点符号数文章总字数
3)输出删某字符串文章
涉知识点
链串插入删查找模式匹配(knp算法)文件写入写出switchcase语句进行菜单选择while语句进行循环if语句进行条件判断等等
设计思路
总体思路:文采链式存储字符串链串插入采插法#’
字符串结束标志插入字符串时文件存储字符串
删算法基思路:输入删字符串样#’结束然文中查找该字符串找删时长度减少否没找删
查找算法删算法类似处:里查找某字符串文中出现次数找该字符串继续查找次数加1直文章末尾结束查找
菜单做选择:switchcase语句进行选择判断类象调类成员函数实现特定功采链式存储字符串字符进行存储遇空隔换行符时会忽略计解决问题文采换方法——输入空格时输入:’输入换行符时输入’\\’输出时遇:’输出空格遇\\’输出换行符
功设计
根提示选择否开始
y n
选择操作 退出
调相应函数
否继续?
详细设计
Linklist类中保护成员head(指针类型)
公成员中包含整型变量len计算字符串长度
外包含5子函数分:
1void rcreat()函数尾插法建立链串字符串存入文件遇#时结束2void print(link *head)函数输出链串遇字符号(:)时输出空格遇字符(\\)时输出换行遇字符等48等57时数字数加1遇字符标点符号时相应标点符号数加1输出判断完指针移
3void deletel(link *headlink * head2)删字符串函数中head 指输入文章第字符head2指删字符串第字符采模式匹配算法进行查找文中找字符删第字符相指针分移文中字符第二字符相继续找文中字符删字符第字符开始新匹配直删字符匹配完找删字符串文中位置文中串字符匹配第字符开始匹配段字符删没找该字符串删
4void print2(link *head2)函数输出删字符串中head2 指删字符串第字符
5void *found(link *headlink *head2)函数查找字符串文中出现次数设置整型变量num统计出现次数初始值0样采模式匹配算法找第次文中出现位置num+1继续找文中找num+1直文章末尾然输出num值
部分函数模块流程图:
void *found(link *headlink *head2)
int num0 link *P*Q*R Phead>next Qhead2>next RP
While
(PNULL)&&(QNULL)
if(P>dataQ>data )
else
RR>next
PR
Qhead2>next
PP>next
QQ>next
if(QNULL)
num++
RR>next
PR
Qhead2>next
运行环境
电脑环境:Windows 7 & Windows XP & Windows vista
软件环境:Visual C++ 60 & Visual studio 2008
#include
#include
using namespace std
class bunch
{
public
char data
bunch *next
}bunch
class bunchlist
{
protected
bunch *head
public
int len
bunch *creat()
{
ofstream SaveFile(cpphometxtios_basebinary)创建文文件
bunch *s*p*r
char ch
cout<<输入字符(号代空格双杠(\\)代换行符)#算法结束
cin>>ch
prnew bunch 申请新空间
p>next NULL 插法添加字符
while (ch'#') #时录入字符保存文中
{
snew bunch
s>data ch
r>next s
rs
SaveFile<
}while
r>next NULL 结束输入返回字符串数
SaveFileclose()
return p
}*creat
void print(bunch *head) 输出文
{
int num0 赋初值
int space0
int len0
int word0
int douhao0
int sentence0
ifstream in(cpphometxt) 读入创建txt文文件
bunch *p
phead>next
while(p>nextNULL) 空文件扫描需记录信息
{
len++ 长度先加1
if(p>data'')号改空格输出
{
cout<<' '
space++ 碰空格号空格数目加1
word++ 字符数目加1
pp>next 移动位循环扫描信息
}if:
if(p>data '')逗号形式空格致赘述
{
word++
douhao++
cout<<''
pp>next
}if
if(p>data '')点形式空格致赘述
{
cout<<''
word++
sentence++
pp>next
}if
if(p>data '')问号形式空格致赘述
{
cout<<''
word++
sentence++
pp>next
}if?
if((p>data>48)&&(p>data<57))碰数字0~9时记录
{
cout<
data
num++ 数字统计加1
pp>next 跳位
}if0~9
if(p>data'\\')双杠改换行输出
{
cout<<'\n'
pp>next
}if\\
else 情况记录字母
cout<
data
pp>next
}while
wordword+1 单词数加1
sentencesentence+1 句子数加1
cout<
void deletel(bunch*headbunch *HEAD) 删操作
{
bunch *P*Q*R*T
Thead
Phead>next
QHEAD>next
RP
while((PNULL)&&(QNULL))空时进行删操作
{
if(P>dataQ>data )
{
PP>next
QQ>next
}
else
{
TT>next
RR>next
PR
QHEAD>next
}
}
if(QNULL)
{
cout<< find the word<
}
else
{
cout<
}
void PRINT(bunch *HEAD)
{ifstream in(hometext)
bunch *q
qHEAD>next
while(qNULL)
{
cout<data
qq>next
}
}
void *found(bunch *headbunch *HEAD)
{
int num0
bunch *P*Q*R
Phead>next
QHEAD>next
RP
while((PNULL)&&(QNULL))
{
if(P>dataQ>data )
{
PP>next
QQ>next
}
else
{
RR>next
PR
QHEAD>next
}
if(QNULL)
{
num++
RR>next
PR
QHEAD>next
}
}
if(num>0)
{cout<
cout<
}
}
void main()
{int choice
char c
bunch *p*q*Y
bunchlist a
cout<<********************************************************************************<
cout<
while(c'y'){
cout<<请输入您选择 <
switch(choice)
{
case 1
cout<<新建文<
break
case 2
cout<<输出结果:<
break
case 3
cout<<输入删字符串:<
adeletel(pY)
cout<<删
aPRINT(Y)
cout<<文章:<
break
case 4
cout<<请输入查找单词:
qacreat()
afound (pq)
break
default
cout<
}
cout<
}
cout<<谢谢<
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档