![文章编辑程序设计报告讲解_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-5/30/3b54857f-4c7d-47ba-998a-28bcf803ceee/3b54857f-4c7d-47ba-998a-28bcf803ceee1.gif)
![文章编辑程序设计报告讲解_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-5/30/3b54857f-4c7d-47ba-998a-28bcf803ceee/3b54857f-4c7d-47ba-998a-28bcf803ceee2.gif)
![文章编辑程序设计报告讲解_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-5/30/3b54857f-4c7d-47ba-998a-28bcf803ceee/3b54857f-4c7d-47ba-998a-28bcf803ceee3.gif)
![文章编辑程序设计报告讲解_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-5/30/3b54857f-4c7d-47ba-998a-28bcf803ceee/3b54857f-4c7d-47ba-998a-28bcf803ceee4.gif)
![文章编辑程序设计报告讲解_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-5/30/3b54857f-4c7d-47ba-998a-28bcf803ceee/3b54857f-4c7d-47ba-998a-28bcf803ceee5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文章编辑、需求分析功能:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过 80个字符,共 N 行; 要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能; 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号 输出形式:1)分行输出用户输入的各行字符;2)分 4 行输出 全部字母数 、数字个数 、空格个数 、 文章总字数 3)输出删除某一字符串、概要设计1、定义结构体 struct li
2、ne ,文本行采用顺序存储,行与行之间采用链式存储2、主要函数:int FindString(LINE * &head,char *str) /* 求在一行中 Str 出现的次数的流程图:统计 str 在文章中出现的次数 */ 查找第一个字符,如果有第一个字符即 p-datai=str0 ,设计数器 k=0查找这个字符后面的字符与要查找的字符串是否匹配即p-datai+j=strj,如果匹配 k+重复第二步,如果 k=len2 ,则查找到, count+ ;如果没查找到,重新进行第一步void delstringword(char *s,char *str) /*删除字符串 *s 中的字符串
3、*str*/tmpp实现思想:从字符串 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三、详细设计:3.1 详细设计思想:( 1)定义结构体: typedef struct linechar *data;struct line *next;LINE;(2)输出函数 void OutPut(LINE
4、 * &head)将头指针赋值为 p;通过 do-while 语句遍历链表;( 3)字符串的创建函数: void Create(LINE * &head)用 printf 语句输出一句提醒语句,请用户输入要编辑的文章 为链表建立一个附加表头结点,将p 付给表头指针;输入字符串,同时判断输入的字符串是否满足条件;用 if 语句判断文章是否输入完成。4) 统计文章中英文字母数: void countLetter(LINE * &head)将 p 付给表头指针;初始化 count 为 0;用 do-while 语句遍历链表,同时统计字符串中英文字母数用 printf 语句输出文章中英文字母数,调用子
5、函数 menu().5) 统计文章中数字个数: void countNumber(LINE* &head)将 p 付给表头指针;初始化 count 为 0;用 do-while 语句遍历链表,同时统计字符串中数字个数;用 printf 语句输出文章中数字个数,调用子函数 menu().6) 统计文章中的空格数: void countSpace(LINE * &head)将 p 付给表头指针;初始化 count 为 0;用 do-while 语句遍历链表,同时统计字符串中空格数;用 printf 语句输出文章中空格数,调用子函数 menu().7) 统计文章总字数: void countAll(
6、LINE * &head)将 p 付给表头指针;初始化 count 为 0;用 do-while 语句遍历链表,同时统计字符串中总字数;用 printf 语句输出文章中总字数,调用子函数 menu().8) 查找字符串的函数: void FindString(LINE * &head)将 p 付给表头指针;初始化 count 为 0;初始化 len1, 用来保存当前行的总字符数; 定义整型变量 len2 表示待统计字符串的长度;用 printf 语句提醒用户输入要统计的字符串;用 do-while 语句遍历链表, 同时用 for 循环和 if 语句找出指定字符串在文章中 出现的次数;用 pri
7、ntf 语句输出指定字符串在文章中出现的总次数,调用子函数 menu().( 9)删除字符串的函数: void DelString(LINE * &head)先创建一个 delstringword ,其中包含两个字符串 char *s 和 char *str ,用 *s 表示输入的字符串, *str 表示要删除的字符。这个函数的功能是找到字符串 s 在字 符串中出现的位置并删除该字符串。定义字符串的删除函数 DelString(), 用 do-while 语句遍历链表,语句中再套 用 if 语句,并调用 delstringword() 进行删除 .( 10 )主函数 :void main()用
8、 switch 语句实现功能的调用。一个数字对应一个操作。3.2 核心代码:#include #include typedef struct linechar *data;struct line *next;LINE; / 创建链表,向里面输入文本数据/ 向屏幕输出文字void OutPut(LINE * &head)LINE *p=head;printf( 输入的文章为 :n );doprintf( %sn ,p-data);while (p=p-next)!=NULL); / 遍历链表printf( n );void menu()printf(文章编辑*nprintf( printf( p
9、rintf(1. 统计文章中全部英文字母数*nn2. 统计文章中空格个数 n););););printf(printf(printf(printf(printf(3 . 统计文章中数字个数4. 统计文章总字数5. 统计指定字符串在文中出现的次数6. 删除指定字符串nnn*nn););););); voidCreate(LINE * &head)printf (请输入一页文章,以 Ctrl+E(E) 为结尾 (每行最多输入 80个字符):n )LINE *p= new LINE;/ 首先为链表建立一个附加表头结点head=p;/ 将付给表头指针char tmp100;while (1)gets(
10、tmp); / 输入字符串if (strlen(tmp)80)printf( 每行最多输入 80 个字符 ! );break ;/ 如果发现输入 E,则退出输入/ 为结点分配空间/ 除去最后一个控制符 E/ 最后一个指针为空if (tmp0=5) break ; p=p-next= new LINE; p-data=new char strlen(tmp)+1;strcpy(p-data,tmp);if (tmpstrlen(tmp)-1=5)p-datastrlen(tmp)-1= 0 break ;p-next=NULL;head=head-next;OutPut(head);printf
11、( n );menu();/ 统计英文字母数void CountLetter(LINE * &head)LINE *p=head;int count=0;doint Len=strlen(p-data); / 计算当前 data 里的数据元素个数 for (int i=0;idatai= a &p-dataidatai= A &p-datainext)!=NULL); / 遍历链表printf( 全部英文字母数 %d n , count); / 返回文章里printf( n );menu();void CountNumber(LINE * &head)LINE *p=head;int coun
12、t=0;doint Len=strlen(p-data);for (int i=0;idatai=48 & p-datainext)!=NULL);printf( 文章中数字个数 : %d n ,count);printf( n );menu();void CountSpace(LINE * &head)LINE *p=head;int count=0;doint Len=strlen(p-data);for (int i=0;idatai=32)count+;while (p=p-next)!=NULL);printf( 空?格?个?数oy: %d n , count);printf( n
13、);menu();void CountAll(LINE * &head)LINE *p=head;int count=0;docount+=strlen(p-data);while (p=p-next)!=NULL);printf(printf( 文章总字数 : %d n ,count); n );menu();void FindString(LINE * &head)LINE *p=head;int count=0;int len1=0;int len2;int i,j,k;char str120;printf( n );printf( 请输入要统计的字符串 : );scanf( %s ,s
14、tr1);len2=strlen(str1);do len1=strlen(p-data); for (i=0;idatai=str10)k=0;for (j=0;jdatai+j=str1j) k+;if (k=len2) count+;i=i+k-1;while (p=p-next)!=NULL); / 遍历链表printf( 该字符串在文中出现的次数 : %d n ,count); printf( n );menu();/ 删除指定的字符串void delstringword( char *s, char *str)/*s 为输入的字符串, *str 为将要删除的字符char *p=st
15、rstr(s,str); / 从字符串中寻找 str 第一次出现的位置 char tmp80;int len=strlen(s);int i=len-strlen(p);int j=i+strlen(str);int count=0;for (int m=0;mi;m+)tmpcount+=sm;for (int n=j;ndata,str)!=NULL)delstringword(p-data,str);while (p=p-next)!=NULL);printf( 删除指定字符串后的文章为 a: n );OutPut(head);printf( n );menu();void main()
16、LINE *head;int i;Create(head);for (;)printf( 请输入到中任意一个数字 :n );scanf( %d,&i);switch (i)case 1:CountLetter(head); break ;case 2:CountSpace(head); break ;case 3:CountAll(head); break ;case 4:CountNumber(head); break ;case 5:FindString(head); break ;case 6:DelString(head);break ;default :printf( 您输入的数字错
17、误 n ); 四、调试分析:1. 测试数据及结果1011122、问题思考:输入文章时, 计算机怎样识别文章是否结束?输出文章时, 怎样处理表示结束的字符? 解决方案:输入文章时,以 Ctrl+E(E) 为结尾,当 tmp0=5 时,发现输入 E ,则退 出输入。输出时文章时,如果 tmpstrlen(tmp)-1=5 即发现表示结束的字符 E,用 p-datastrlen(tmp)-1=0 除去最后一个控制符 E 。3. 算法改进:本程序的文章为用户输入的文章, 只能做即时输入的统计、 编辑, 而不能对已有的磁盘 文件中的文章进行统计、编辑,如果引入文件流类,就可以打开磁盘文件,对其进行统计、 编辑并保存,这是有待改进的。五、总结 虽然此次的程序不是很完备,但是总体还是一个比较能体现数据结构知识点能力的程 序,当然只是相对于我这个初学者来说。在刚开始编程的时候,我感到很茫然,无从下手。 但是困难是可以解决的, 只要通过努力, 向老师虚心学习请教, 再
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《理解成语的方法》课件
- 《教师演示技能》课件
- 《骨骼系统MRI袁飞》课件
- 《中长链脂肪乳》课件
- 三年级语文作文指导课-我爱吃的水果课件
- 确定合同完成进度的方法
- 探索本科理科研究
- 强化“五个认同”筑牢新时代内蒙古民族团结基石
- 快速制作网页的方法
- 2025年皮革、毛皮及其制品加工专用设备项目发展计划
- 2025年宽带研究分析报告
- 建筑与市政工程第三方质量安全巡查方案
- 多元化票务系统设计-深度研究
- 二零二五版财务顾问保密与工作内容协议3篇
- 2025-2030年中国干混砂浆行业运行状况及发展趋势预测报告
- 2024年菏泽职业学院高职单招语文历年参考题库含答案解析
- GB/T 22180-2024速冻裹衣鱼
- 2025江苏盐城市交通投资建设控股集团限公司招聘19人高频重点提升(共500题)附带答案详解
- 人教版地理七年级下册7.1.1 亚洲的自然环境(课件33张)
- 2024托管班二人合伙的协议书
- 《输电线路金具识别》课件
评论
0/150
提交评论