免费预览已结束,剩余12页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文章编辑一、需求分析 功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出全部字母数、数字个数、空格个数、文章总字数(3)输出删除某一字符串后的文章;二、概要设计1、定义结构体 struct line,文本行采用顺序存储,行与行之间采用链式存储2、主要函数:int FindString(LINE * &head,char *str) /*统计str在文章中出现的次数*/求在一行中Str出现的次数的流程图:开始count=0;h=0;len1=0; len2=strlen(str);p-datai=str0i+k=0;j=0;p-datai+j=strjk+;j+;k=len2count+;i=i+k-1;结束YNYNNY查找第一个字符,如果有第一个字符即p-datai=str0,设计数器k=0查找这个字符后面的字符与要查找的字符串是否匹配即p-datai+j=strj,如果匹配k+重复第二步,如果k=len2,则查找到,count+;如果没查找到,重新进行第一步void delstringword(char *s,char *str) /*删除字符串*s中的字符串*str*/ strpi jsfor(m=0;mi;m+)tmpcount+=sm;for(n=j;nlen;n+)tmpcount+=sn;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三、详细设计:3.1 详细设计思想:(1)定义结构体:typedef struct line char *data; struct line *next;LINE;(2)输出函数void OutPut(LINE * &head) 将头指针赋值为p;通过do-while语句遍历链表;(3)字符串的创建函数: void Create(LINE * &head) 用printf语句输出一句提醒语句,请用户输入要编辑的文章 为链表建立一个附加表头结点,将p付给表头指针; 输入字符串,同时判断输入的字符串是否满足条件; 用if语句判断文章是否输入完成。 (4) 统计文章中英文字母数:void countLetter(LINE * &head) 将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中英文字母数 用printf语句输出文章中英文字母数,调用子函数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(LINE * &head)将p付给表头指针; 初始化count为0; 用do-while语句遍历链表,同时统计字符串中总字数; 用printf语句输出文章中总字数,调用子函数menu().(8)查找字符串的函数:void FindString(LINE * &head)将p付给表头指针;初始化count为0;初始化len1,用来保存当前行的总字符数;定义整型变量len2表示待统计字符串的长度;用printf语句提醒用户输入要统计的字符串;用do-while语句遍历链表,同时用for循环和if语句找出指定字符串在文章中出现的次数;用printf语句输出指定字符串在文章中出现的总次数,调用子函数menu().(9)删除字符串的函数:void DelString(LINE * &head) 先创建一个delstringword,其中包含两个字符串char *s和char *str,用*s表示输入的字符串,*str表示要删除的字符。这个函数的功能是找到字符串s在字符串中出现的位置并删除该字符串。 定义字符串的删除函数DelString(),用do-while语句遍历链表,语句中再套用if语句,并调用delstringword()进行删除. (10)主函数:void main() 用switch语句实现功能的调用。一个数字对应一个操作。3.2 核心代码:#include #include /*文本每行以字符串形式存储,行与行之间以链表存储*/typedef struct line char *data; struct line *next;LINE; /*创建一链表,同时向里面输入文本数据*/*向屏幕输出文章*/void OutPut(LINE * &head) LINE *p=head; printf(输入的文章为:n); do printf(%sn,p-data); while(p=p-next)!=NULL);/*遍历链表*/ printf(n);void menu()printf(*文章编辑*n);printf(*n);printf(1.统计文章中全部英文字母数 n);printf(2.统计文章中空格个数 n);printf(3 .统计文章中数字个数 n);printf(4.统计文章总字数 n); printf(5.统计指定字符串在文中出现的次数 n);printf(6.删除指定字符串 n);printf(*n);void Create(LINE * &head) printf (请输入一页文章,以Ctrl+E(E)为结尾(每行最多输入字符!):n); LINE *p=new LINE; /*首先为链表建立一个附加表头结点*/ head=p; /*将p付给表头指针*/ char tmp100; while(1) gets(tmp); /*输入字符串!*/ if(strlen(tmp)80) printf(每行最多输入字符); break; if(tmp0=5)break; /*如果发现输入E,则退出输入*/ p=p-next=new LINE; p-data=new charstrlen(tmp)+1; /*为结点分配空间*/ strcpy(p-data,tmp); if(tmpstrlen(tmp)-1=5) /*除去最后一个控制符E */ p-datastrlen(tmp)-1=0; break; p-next=NULL; /*最后的一个指针为空*/ head=head-next; OutPut(head); printf(n); menu();/*统计英文字母数*/void CountLetter(LINE * &head) LINE *p=head; int count=0;do int 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 count=0; do int Len=strlen(p-data); /*计算当前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; do int Len=strlen(p-data); /*计算当前data 里的数据元素的个数*/ for(int i=0;idatai=32)count+; /*计算空格数,空格ASCII码为*/ while(p=p-next)!=NULL); /*遍历链表*/ printf(空格个数: %d n, count); printf(n); menu();/*统计文章的总字数*/void CountAll(LINE * &head) LINE *p=head; /*保存链表的首地址*/ int count=0; do /*计算总字符数*/ count+=strlen(p-data); while(p=p-next)!=NULL); /*遍历链表*/ printf(文章总字数: %d n,count); printf(n); menu();/*统计str在文章中出现的次数*/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,str1); 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=strstr(s,str); /*从字符串s中寻找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(删除指定字符串后的文章为: n);OutPut(head); printf(n); menu();void main() 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(您输入的数字错误n); 四、调试分析:1. 测试数据及结果2、问题思考:输入文章时,计算机怎样识别文章是否结束?输出文章时,怎样处理表示结束的字符?解决方案:输入文章时,以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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 嘉兴市中医院臀位助产技术专项准入考核
- 浙江省鄞州区2026届物理九上期中统考试题含解析
- 江苏省无锡市锡山区天一实验学校2026届八年级物理第一学期期末复习检测试题含解析
- 内蒙古呼伦贝尔市莫旗2026届九上物理期中统考模拟试题含解析
- 美容仪器临床试验行业跨境出海项目商业计划书
- 2026届云南省曲靖市物理八上期末综合测试试题含解析
- 羊肉面包店行业深度调研及发展项目商业计划书
- 美容产品成分科普教育创新创业项目商业计划书
- 宜昌市远安县2025年中考考前最后一卷数学试卷含解析
- 企业文化建设实施方案与员工手册
- 钢结构施工安全技术交底
- 人工智能偏见与公正性-洞察阐释
- 2025年时事政治考试题及参考答案(100题)
- T/CATCM 031-2024柔毛淫羊藿种苗分级标准
- T/GDMIA 001-2019超细粒度砂磨机
- 广铁校招机考题库及答案
- 《交流磁路及其计算》课件
- 国际商务礼仪与沟通技巧测试卷
- 袜子定型车间管理制度
- DCS控制系统管理制度
- 2025年10月自考15040习概押题及答案
评论
0/150
提交评论