数据结构 文章编辑程序的设计_第1页
数据结构 文章编辑程序的设计_第2页
数据结构 文章编辑程序的设计_第3页
数据结构 文章编辑程序的设计_第4页
数据结构 文章编辑程序的设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构(c语言版)课程设计报告文章编辑程序的设计学 院: 信息科学技术学院 班 级: 信息工程09级 1 班 学 号: 7 姓 名: 董升 指导教师: 何儒云 完成日期: 2010年12月 目录1.需求分析文章编辑- 3 -2.程序设计- 3 -结构体的设计:- 3 -函数的设计:- 3 -主函数的设计:- 8 -3.测试分析- 9 -4.用户说明- 10 -5.经验和体会- 10 -6.附录程序完整原代码- 10 -1.需求分析文章编辑题目:22题,文章编辑。功能:从键盘输入一页文字,静态存储在一个文件中要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文

2、章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章;2.程序设计结构体的设计:typedef struct essaychar *line;/动态分配的字符数组struct essay *next;/结构体指针ESS;/创建结构体,行与行之间用链表的形式函数的设计:#include#include#includevoid

3、 create(ESS * &h)/创造链表 char m1000;ESS *p;p=(ESS *)malloc(sizeof(ESS);h=p;int i,k;FILE *fp; fp=fopen(d:text.txt,w);/所输入的文本将保存在d盘的rr文本文档中 printf (输入文章, 用Ctrl+B结束输入:n);/按Ctrl+B(B)将结束输入while(1) gets(m); /输入字符串if(strlen(m)1000)printf(超过1000字符n);break;if(m0=2)break; /如果发现输入 B,则退出输入 p=p-next=(ESS *)malloc(

4、sizeof(ESS);p-line=(char *)malloc(sizeof(char)*strlen(m+1); /为结点分配空间 strcpy(p-line,m);/将字符串m,复制到p所指向的字符串中 for(i=0;ilinei!=2);i+) fwrite(&p-linei,sizeof(char),1,fp);/写入文本文档中 fputc(n,fp);if(mstrlen(m)-1=2) /除去最后一个控制符 B p-linestrlen(m)-1=0;break; p-next=NULL; /*最后的一个指针为空 */ h=h-next; /将下一个节点赋值到头结点中int

5、Count(ESS * h) /统计数字 ESS *p=h; int co=0;int i; int Lenght; do Lenght=strlen(p-line); /*计算当前 line 里的数据元素的个数*/ for(i=0;ilinei=48 & p-lineinext)!=NULL); /遍历 链表不为空 return co;int Letter(ESS * h)/统计字母 ESS *p=h; int co=0;int Lenght;do Lenght=strlen(p-line); /*计算当前 line 里的数据元素的个数*/ for(int i=0;ilinei=a&p-li

6、neilinei=A&p-lineinext)!=NULL); /遍历 链表不为空return co; /*返回文章的字母总数*/int chinese(ESS * h)/统计符号 ESS *p=h; int co=0;int Lenght;do Lenght=strlen(p-line); /*计算当前 line 里的数据元素的个数*/ for(int i=0;ilinei=1 &p-lineinext)!=NULL); /遍历 链表不为空return co; /*返回*/int Space(ESS * h)/统计空格 ESS *p=h; int co=0;int Lenght; do Le

7、nght=strlen(p-line); /计算当前 line 里的数据元素的个数 for(int i=0;ilinei=32) co+; /计算空格数,空格ASCII码为32 while(p=p-next)!=NULL); /遍历 链表return co;int CountAll(ESS * h)/统计文章字数 ESS *p=h; /保存链表的首地址 int co=0; do /计算总字符数 co+=strlen(p-line); while(p=p-next)!=NULL); /遍历 链表 return co;int Find(ESS * h,char *s)/统计s出现次数 ESS *p

8、=h; int co=0; int len1=0; /*保存当前行的总字符数*/ int len2=strlen(s); /*待统计字符串的长度*/ int i,j,q; do len1=strlen(p-line); /*当前行的字符数*/for(i=0;ilinei=s0)q=0; for(j=0;jlinej+i=sj) q+;if(q=len2)co+;i=i+q-1; while(p=p-next)!=NULL); /*遍历 链表*/ return co;void delstring(char *s,char *str)/* *s为输入的字符串,*str为将要删除的字符*/char

9、*p=strstr(s,str); /*从字符串s中寻找str第一次出现的位置*/ char m80; int len=strlen(s); int i=len-strlen(p);/比较两串字符串之间的字符个数 int j=i+strlen(str); int co=0; for(int k=0;ki;k+)mco+=sk; for(int n=j;nline,str)!=NULL)delstring(p-line,str);/调用删除每个字符串,只删一次。while(p=p-next)!=NULL); void Out(ESS * &h)/ ESS *p=h; do printf(%sn,

10、p-line);/显示字符串 while(p=p-next)!=NULL); /*遍历 链表*/void display()printf(n);printf(n);printf(*n);printf(* 统计数字*n);printf(* 统计字母*n); printf(* 统计空格*n);printf(* 统计文章总字数*n);printf(* 统计重复字符串*n);printf(* 统计重复出现字符串*n);printf(* 删除功能*n); printf(*n); printf(n);/构造一个良好的界面良好的界面主函数的设计:int main()ESS *h; create(h);dis

11、play();Out(h);printf(n); printf(数字个数:%d n,Count(h);printf(全部字母数:%d n,Letter(h);printf(中文字数:%d n,(CountAll(h)-chinese(h)/2);printf(空格个数: %d n,Space(h);printf(文章总字数(含空格): %d n,CountAll(h)-(CountAll(h)-chinese(h)/2);printf(文章总字数(不含空格): %d n,CountAll(h)-Space(h)-(CountAll(h)-chinese(h)/2);char s120,s220

12、; printf(n);printf(请输入要统计的字符串:);scanf(%s,s1);printf(%s出现的次数为:%d n,s1,Find(h,s1);printf(n);printf(请输入要删除的某一字符串:);scanf(%s,s2);DelString(h,s2); printf(删除%s后的文章为:n,s2);Out(h); /调用删除函数后的显示Return 0;3.测试分析输入:输出及其他操作:4.用户说明根据界面提示即可完成所有操作。5.经验和体会在这次课程设计中,我有将书本重新过了一边,不但巩固了以前就会的知识,还弥补了从前的空缺,学到了许多从前没有注意的知识。在实践

13、的过程中,遇到了许多问题,我查阅了许多资料,请教了一些朋友对于编程中应注意的问题又有了新的认识,我知道了许多书上没有的经验和教训。通过进行这次课程设计,我对数据结构又有了更加深刻的认识,使我以后学习更加轻松,对于编程更又信心!6.附录程序完整原代码#include#include#includetypedef struct essaychar *line;/动态分配的字符数组struct essay *next;/结构体指针ESS;/创建结构体,行与行之间用链表的形式void create(ESS * &h)/创造链表 char m1000;ESS *p;p=(ESS *)malloc(siz

14、eof(ESS);h=p;int i,k;FILE *fp; fp=fopen(d:text.txt,w);/所输入的文本将保存在d盘的rr文本文档中 printf (输入文章, 用Ctrl+B结束输入:n);/按Ctrl+B(B)将结束输入while(1) gets(m); /输入字符串if(strlen(m)1000)printf(超过1000字符n);break;if(m0=2)break; /如果发现输入 B,则退出输入 p=p-next=(ESS *)malloc(sizeof(ESS);p-line=(char *)malloc(sizeof(char)*strlen(m+1);

15、/为结点分配空间 strcpy(p-line,m);/将字符串m,复制到p所指向的字符串中 for(i=0;ilinei!=2);i+) fwrite(&p-linei,sizeof(char),1,fp);/写入文本文档中 fputc(n,fp);if(mstrlen(m)-1=2) /除去最后一个控制符 B p-linestrlen(m)-1=0;break; p-next=NULL; /*最后的一个指针为空 */ h=h-next; /将下一个节点赋值到头结点中int Count(ESS * h) /统计数字 ESS *p=h; int co=0;int i; int Lenght; d

16、o Lenght=strlen(p-line); /*计算当前 line 里的数据元素的个数*/ for(i=0;ilinei=48 & p-lineinext)!=NULL); /遍历 链表不为空 return co;int Letter(ESS * h)/统计字母 ESS *p=h; int co=0;int Lenght;do Lenght=strlen(p-line); /*计算当前 line 里的数据元素的个数*/ for(int i=0;ilinei=a&p-lineilinei=A&p-lineinext)!=NULL); /遍历 链表不为空return co; /*返回文章的字

17、母总数*/int chinese(ESS * h)/统计符号 ESS *p=h; int co=0;int Lenght;do Lenght=strlen(p-line); /*计算当前 line 里的数据元素的个数*/ for(int i=0;ilinei=1 &p-lineinext)!=NULL); /遍历 链表不为空return co; /*返回*/int Space(ESS * h)/统计空格 ESS *p=h; int co=0;int Lenght; do Lenght=strlen(p-line); /计算当前 line 里的数据元素的个数 for(int i=0;ilinei

18、=32) co+; /计算空格数,空格ASCII码为32 while(p=p-next)!=NULL); /遍历 链表return co;int CountAll(ESS * h)/统计文章字数 ESS *p=h; /保存链表的首地址 int co=0; do /计算总字符数 co+=strlen(p-line); while(p=p-next)!=NULL); /遍历 链表 return co;int Find(ESS * h,char *s)/统计s出现次数 ESS *p=h; int co=0; int len1=0; /*保存当前行的总字符数*/ int len2=strlen(s);

19、 /*待统计字符串的长度*/ int i,j,q; do len1=strlen(p-line); /*当前行的字符数*/for(i=0;ilinei=s0)q=0; for(j=0;jlinej+i=sj) q+;if(q=len2)co+;i=i+q-1; while(p=p-next)!=NULL); /*遍历 链表*/ return co;void delstring(char *s,char *str)/* *s为输入的字符串,*str为将要删除的字符*/char *p=strstr(s,str); /*从字符串s中寻找str第一次出现的位置*/ char m80; int len=

20、strlen(s); int i=len-strlen(p);/比较两串字符串之间的字符个数 int j=i+strlen(str); int co=0; for(int k=0;ki;k+)mco+=sk; for(int n=j;nline,str)!=NULL)delstring(p-line,str);/调用删除每个字符串,只删一次。while(p=p-next)!=NULL); void Out(ESS * &h)/ ESS *p=h; do printf(%sn,p-line);/显示字符串 while(p=p-next)!=NULL); /*遍历 链表*/void display()printf(n);printf(n);printf(*n);printf(* 统计数字*n

温馨提示

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

最新文档

评论

0/150

提交评论