数据结构课程设计报告60519_第1页
数据结构课程设计报告60519_第2页
数据结构课程设计报告60519_第3页
数据结构课程设计报告60519_第4页
数据结构课程设计报告60519_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

..数据结构设计报告题目:简单编译器的实现学院信息科学与工程学院学生姓名尹婷班级学号0909101820指导教师林立新日期2012.7.03一、问题描述编写一个简单的文章编辑程序,具体功能如下:1.用户可按行输入字符串到程序,每行不超过80字2.分别统计出其中每行的英文字母数,数字数,空格数,以及整篇文章的总字数3.统计某一字符串在文章中出现的次数并输出该次数4.可删除某一字串,删除后程序自动将后面的字符前移程序要求:1.存储结构使用线性表2.分别使用几个子函数实现相应功能二、基本要求模块功能需求<1>输入模块:用户可在文本输入框中输入任意字符,最多输入80个字符,输入后保存在程序变量中.<2>编辑模块:用户可点击删除按钮,删除某一行或行中的任何字串.<3>统计模块:程序会根据用户需求统计某一行的英文字母数、数字数、空格数,并自动显示整篇文章的总字数<4>显示输出模块:程序会将用户输入的文章及统计结果合理清晰的显示在窗口中三、数据结构的设计1、定义结构体structline,文本行采用顺序存储,行与行之间采用链四软件模块结构图开始文章输入、浏览、统计串、统计及删除的详细流程如下图所示:开始显示文本信息且换行输入文本信息<<=80>回车显示文本信息且换行输入文本信息<<=80>显示输入内容显示输入内容并调出主菜单选定选项2调出主菜单选定选项2调出主菜单调出主菜单调出主菜单选定选项3显示文章统计信息的结果选定选项3显示文章统计信息的结果显示出现次数输入要统计的字符串选定选项4显示出现次数输入要统计的字符串选定选项4输入要删除的字符串选定选项5调出主菜单输入要删除的字符串选定选项5调出主菜单选定选项6调出主菜单显示删除后的文本选定选项6调出主菜单显示删除后的文本退出退出五程序流程图intFindString<LINE*&head,char*str>/*统计str在文章中出现的次数*/求在一行中Str出现的次数的流程图:开始开始count=0;h=0;len1=0;len2=strlen<str>;p->data[i]==str[0]i++k=0;j=0;p->data[i+j]==str[j]k++;j++;k=len2count++;i=i+k-1;结束YNYNNY①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步voiddelstringword<char*s,char*str>/*删除字符串*s中的字符串*str*/strstrpijsfor<m=0;m<i;m++>tmp[count++]=s[m];for<n=j;n<len;n++>tmp[count++]=s[n];tmp①.从字符串s中寻找str第一次出现的位置*p=strstr<s,str>;②.len=strlen<s>;i=len-strlen<p>即前i项恰好不含要删除的字符串,将前i项复制到tmp中③.j=i+strlen<str>即要删除的字符串在i+1和j之间,将j之后的字符串复制到tmp中④.将tmp赋给串s,返回s六程序设计思想存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:〔1分行输出用户输入的各行字符;〔2分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"〔3输出删除某一字符串后的文章七源程序#include<iostream>

#include<fstream>//输入输出文件流类头文件

usingnamespacestd;

constintN=800;

classText//定义Text类

{

private:

chars[N][80];

charfilename[30];

charstr[90];

intlen;

voidgetdata1<>;

voidgetdata2<>;

voidgetdata<>;

voidshow_text<>;

voidcount<>;

voidsearch_str<>;

voiddelete_str<>;

voidhelp<>;

public:

Text<>

{

cout<<"★---您好,欢迎使用文本编辑程序!---★"<<endl<<endl;

cout<<"========================================================================

========"<<endl;

cout<<"========================================================================

========"<<endl;

}

voidMain_Work<>;

};

voidText::getdata<>

{

intchose;//选择文本

cout<<"请选择文件来源"<<endl<<endl;

cout<<"1、打开文件"<<endl<<endl;

cout<<"2、手动输入"<<endl<<endl;

cin>>chose;

switch<chose>

{

case1:getdata1<>;break;

case2:getdata2<>;break;

}

}

voidText::getdata1<>

{

cout<<"请输入文本名:"<<endl;

cin>>filename;

cout<<endl;

FILE*f1;chara;inti=0,j=0;

f1=fopen<filename,"r">;//

通过文件名与文件流关联

cout<<"正在读取数据......"<<endl<<endl;

len=0;

memset<s,0,sizeof<s>>;

while<<a=getc<f1>>!=EOF>//从文件逐个读取字符并传递a直到文件结束

{

if<j==79>{s[i++][j]='\n';j=0;}//每行不超过80个字符

if<a!='\n'>{s[i][j++]=a;}//如果没有回车就一直传递

elses[i++][j]=a;//如果遇见回车换行输入

}

len=i+1;//计算行数

cout<<"数据读取完毕:"<<endl;

}

voidText::getdata2<>//从键盘输入字符

{

cout<<"请输入一段字符,以#号结束"<<endl;

memset<s,0,sizeof<s>>;

chara;inti=0,j=0;

while<<a=getchar<>>!='#'>//以#号结束

{

if<j==79>{s[i++][j]='\n';j=0;}

if<a!='\n'>{s[i][j++]=a;}

elses[i++][j]=a;

}

len=i+1;

}

voidText::show_text<>

{

cout<<"文本如下:"<<endl;

for<inti=0;i<len;i++>

for<intj=0;j<80;j++>

{

if<s[i][j]!='\0'>

cout<<s[i][j];

}

cout<<endl;

}

voidText::help<>

{cout<<"请选择操作指令"<<endl<<endl;

cout<<"========================================================================

========"<<endl;

cout<<"--------☆count:分别统计各类字符总数☆--------"<<endl<<endl;

cout<<"--------☆search:统计所查字符☆--------"<<endl<<endl;

cout<<"--------☆delete:删除特定字符☆--------"<<endl<<endl;

cout<<"--------☆help:查看程序指令集合☆--------"<<endl<<endl;

cout<<"--------☆return:返回选择文件☆--------"<<endl<<endl;

cout<<"--------☆exit:退出文本编辑程序☆--------"<<endl<<endl;

cout<<"========================================================================

========"<<endl;

}

voidText::count<>//分别统计各类字符个数

{

intcc,cp,cn,co,sum;

cc=cp=cn=co=sum=0;

for<inti=0;i<len;i++>

for<intj=0;j<80;j++>

{

if<s[i][j]>='0'&&s[i][j]<='9'>cn++;

if<s[i][j]>='A'&&s[i][j]<='Z'||s[i][j]>='a'&&s[i][j]<='z'>cc++;

if<s[i][j]==''>cp++;

if<s[i][j]!='\0'>sum++;//只要字符不为空,就计入总数

}

cout<<"文章字符统计如下"<<endl<<endl;

cout<<"字母个数为:"<<cc<<endl;

cout<<"空格个数为:"<<cp<<endl;

cout<<"数字个数为:"<<cn<<endl;

cout<<"文章总字数:"<<sum<<endl;

}

voidText::search_str<>

{

charstr[80],*p;intq,count=0;//定义子串指针

cout<<"请输入一个字符子串:"<<endl;

cin>>str;

p=str;//从键盘输入子串

for<inti=0;i<len;i++>

for<intj=0;j<80;j++>

{

q=j;//

保存j的初值

while<*p!='\0'>//匹配直至子串最后一个字符

if<*p==s[i][j]>{j++;p++;}//如果字符匹配,目标串和子串同时右移

elsebreak;//如果字符不匹配跳出循环

if<*p=='\0'>count++;//完全匹配时count加1

p=str;//子串还原

j=q;//还原j的值

}

cout<<str<<"在文章中的出现次数为:"<<count<<endl<<endl;

}

voidText::delete_str<>

{

charstr[80],*p;

intq,m;

cout<<"请输入一个字符子串:"<<endl;

cin>>str;

p=str;

for<inti=0;i<len;i++>

for<intj=0;j<80;j++>

{

q=j;

while<*p!='\0'>

if<*p==s[i][j]>{j++;p++;}

elsebreak;

m=j-q;//删除子串后移动的距离〔子串长度

if<*p=='\0'>

{

for<j=q;s[i][j+m]!='\0';j++>s[i][j]=s[i][j+m];//字符前移

s[i][j]='\0';//前移之后末尾长度为子串长度的字符设为结束符

j=q-1;//删除一次子串,目标串前移之后,j++〔再次匹配需要-1

}

elsej=q;//不删除子串,前面的已经匹配过,所以不需要-1

p=str;//子串还原

}

cout<<"删除字符"<<str<<"后的文本为:"<<endl<<endl;

show_text<>;

}

voidText::Main_Work<>

{

charorder[10];

getdata<>;

show_text<>;

cout<<endl;

help<>;

cout<<"请输入指令:";

while<cin>>order>

{

cout<<endl;

if<strcmp<order,"exit">==0>return;

if<strcmp<order,"count">==0>count<>;

else

if<strcmp<order,"search">==0>search_str<>;

else

if<strcmp<order,"delete">==0>delete_str<>;

else

if<strcmp<order,"return">==0>Main_Work<>;

else

if<strcmp<order,"help">==0>help<>;

elsecout<<"指令错误,请重新输入"<<endl<<endl;

cout<<"请输入指令:";

}

}

intmain<>

{

Texttext;

text.Main_Work<>;

return0;

}

..八调试分析1文本输出部分正确,后面出现乱码,查找资料说是没

温馨提示

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

评论

0/150

提交评论