版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构(C语言版)课程设计报告文章编辑程序的设计学院: 信息科学技术学院班级: 信息工程09级1班学号: 200941843107 姓名: 董升 指导教师: 何儒云 完成日期: 2010年12月目录TOC\o"1-5"\h\z\o"CurrentDocument"需求分析 文章编辑 -3-\o"CurrentDocument"程序设计 -3-结构体的设计: -3-函数的设计: -3-主函数的设计: -8-\o"CurrentDocument"测试分析 -9-用户说明 -10 -\o"CurrentDocument"经验和体会 -10-\o"CurrentDocument"6•附录一一程序完整原代码 -11-需求分析 文章编辑题目:22题,文章编辑。功能:从键盘输入一页文字,静态存储在一个文件中要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2) 统计某一字符串在文章中出现的次数,并输出该次数;(3) 删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;o"文章总字数”o"文章总字数”(2) 分4行输出”全部字母数"、”数字个数”、"空格个数”、(3) 输出删除某一字符串后的文章;程序设计结构体的设计:typedefstructessay{char*line;〃 动态分配的字符数组structessay*next;//结构体指针}ESS;//创建结构体,行与行之间用链表的形式函数的设计:#include<stdio.h>#include<string.h>#include<stdlib.h>voidcreate(ESS*&h)〃创造链表{charm[1000];ESS*p;p=(ESS*)malloc(sizeof(ESS));h=p;inti,k;FILE*fp;fp=fopen("d:\\text.txt","w");〃所输入的文本将保存在 d盘的rr文本文档中printf("输入文章,用Ctrl+B结束输入:\n");〃按Ctrl+B(AB)将结束输入while(1){gets(m); //输入字符串if(strlen(m)>1000){printf(”超过1000字符\n");break;}if(m[0]==2)break; II如果发现输入ab,则退出输入p=p->next=(ESS*)malloc(sizeof(ESS));p->line=(char*)malloc(sizeof(char)*strlen(m+1)); II为结点分配空间strcpy(p->line,m);〃将字符串m,复制到p所指向的字符串中for(i=0;i<(k=strlen(m))&&(p->line[i]!=2);i++)fwrite(&p->line[i],sizeof(char),1,fp);〃 写入文本文档中fputc('\n',fp);if(m[strlen(m)-1]==2) II除去最后一个控制符 ab{p->line[strlen(m)-1]='\0';break;}}p->next=NULL; I*最后的一个指针为空 *Ih=h->next;II将下一个节点赋值到头结点中}intCount(ESS*h)II统计数字{ESS*p=h;intco=0;inti;intLenght;do{Lenght=strlen(p->line);I*计算当前line里的数据元素的个数*I
for(i=0;i<Lenght;i++)if(p->line[i]>=48&&p->line[i]<=57)〃 用ASCII码来进行比较,数字co++;}while((p=p->next)!=NULL); //遍历链表不为空returnco;}intLetter(ESS*h)〃统计字母{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);/*计算当前line里的数据元素的个数*/for(inti=0;i<Lenght;i++)if((p->line[i]>='a'&&p->line[i]<='z')||(p->line[i]>='A'&&p->line[i]<='Z'))/*计算字母数*/co++;}while((p=p->next)!=NULL); //遍历链表不为空returnco; /*返回文章的字母总数*/}intchinese(ESS*h)〃统计符号{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);/*计算当前line里的数据元素的个数*/for(inti=0;i<Lenght;i++)if((p->line[i]>=1&&p->line[i]<=254))字符数字以及符号*/co++;}while((p=p->next)!=NULL); //遍历链表不为空returnco; /*返回*/48与57之间是48与57之间是/*计算intSpace(ESS*h)〃统计空格{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);//计算当前line里的数据元素的个数for(inti=0;i<Lenght;i++)if(p->line[i]==32)co++;//计算空格数,空格ASCII码为32}while((p=p->next)!=NULL); 〃遍历链表returnco;}intCountAII(ESS*h)〃统计文章字数ESS*p=h;intco=0;//保存链表的首地址do{co+=strlen(p->line);}while((p=p->next)!=NULL);returnco;//计算总字符数}//遍历链表intFind(ESS*h,char*s)〃统计s出现次数{ESS*p=h;intco=0;/*保存当前行的总字符数*//*保存当前行的总字符数*//*待统计字符串的长度*//*当前行的字符数*//*字符匹配*/intlen2=strlen(s);inti,j,q;do{len1=strlen(p->line);for(i=0;i<len1;i++){if(p->line[i]==s[0]){q=0;for(j=0;j<len2;j++)
if(p->line[j+i]==s[j])q++;if(q==len2){co++;i=i+q-1;}}}}while((p=p->next)!=NULL);/*遍历链表/*遍历链表*/}voiddelstring(char*s,char*str)/**s为输入的字符串,*str为将要删除的字符*/{char*p=strstr(s,str);/*从字符串s中寻找str第一次出现的位置*/charm[80];intlen=strlen(s);inti=len-strlen(p);〃比较两串字符串之间的字符个数intj=i+strlen(str);intco=0;for(intk=O;k<i;k++)m[co++]=s[k];for(intn=j;n<len;n++)m[co++]=s[n];m[co]='\0:strcpy(s,m); /*返回新的字符串*/}voidDelString(ESS*h,char*str){ESS*p=h;do{if(strstr(p->line,str)!=NULL)delstring(p->line,str);〃调用删除每个字符串,只删一次。}while((p=p->next)!=NULL);}voidOut(ESS*&h)//{ESS*p=h;do{printf("%s\n",p->line);〃显示字符串}/*遍历链表/*遍历链表*/voiddisplay。{printf("\n");printf("\n");printf("********************^统计数^字******************\n")・printf("********************^统计字母******************\n")・printf("********************^统计空^格******************\n")・printf("********************统计文章总字数************\n");printf("********************统计重复字符串 ************\n");printf("********************统计重复出现字符串********n”);printf("********************除功育总******************\n”)・printf("***********************************************\n");printf("***********************************************\n");printf("\n");}//构造一个良好的界面良好的界面主函数的设计:intmain(){ESS*h;create(h);display();Out(h);printf("\n");printf("数字个数:%d\n",Count(h));printf("全部字母数: %d\n",Letter(h));printf("中文字数:%d\n",(CountAII(h)-chinese(h))/2);printf("空格个数:%d\n",Space(h));printf("文章总字数(含空格):%d\n",CountAII(h)-(CountAII(h)-chinese(h))/2);printf("文章总字数(不含空格):%d\n",CountAII(h)-Space(h)-(CountAII(h)-chinese(h))/2);chars1[20],s2[20];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); 〃调用删除函数后的显示Return0;3•测试分析输入:匸弋*E* tVisusilStudioXKyF^OjBCtk\22jt^tfilvXDB-bvigXSZe?xewoshizhongguorenuoaiwodezuguo我是中国人我爰我的祖国123123123qwequeqwe输出及其他操作:
第test,tyt-记事本 匚叵|阪文祥0)錨辑⑥格式®萱看迪帮助堪)uashizhongquorenwoaiuodezuquo我是中国人我爱我的祖国123123123queqweqwe4•用户说明根据界面提示即可完成所有操作。5•经验和体会在这次课程设计中,我有将书本重新过了一边,不但巩固了以前就会的知识,还弥补了从前的空缺,学到了许多从前没有注意的知识。在实践的过程中,遇到了许多问题,我查阅了许多资料,请教了一些朋友对于编程中应注意的问题又有了新的认识,我知道了许多书上没有的经验和教训。通过进行这次课程设计,我对数据结构又有了更加深刻的认识,使我以后学习更加轻松,对于编程更又信心!!6•附录一一程序完整原代码#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstructessay{char*line;〃动态分配的字符数组structessay*next;//结构体指针}ESS;//创建结构体,行与行之间用链表的形式voidcreate(ESS*&h)//创造链表{charm[1000];ESS*p;p=(ESS*)malloc(sizeof(ESS));h=p;inti,k;FILE*fp;fp=fopen("d:\\text.txt","w");〃所输入的文本将保存在 d盘的rr文本文档中printf("输入文章,用Ctrl+B结束输入:\n");//按Ctrl+B(AB)将结束输入while(1){gets(m); //输入字符串if(strlen(m)>1000){printf(”超过1000字符\n");break;}if(m[0]==2)break; //如果发现输入ab,则退出输入p=p->next=(ESS*)malloc(sizeof(ESS));p->line=(char*)malloc(sizeof(char)*strlen(m+1)); //为结点分配空间strcpy(p->line,m);〃将字符串m,复制到p所指向的字符串中for(i=0;i<(k=strlen(m))&&(p->line[i]!=2);i++)fwrite(&p->line[i],sizeof(char),1,fp);〃 写入文本文档中fputc('\n',fp);if(m[strlen(m)-1]==2) //除去最后一个控制符 AB{p->line[strlen(m)-1]='\0:break;}}p->next=NULL; /*最后的一个指针为空 */h=h->next;//将下一个节点赋值到头结点中}intCount(ESS*h)//统计数字{ESS*p=h;intco=0;inti;intLenght;do{Lenght=strlen(p->line);/*计算当前line里的数据元素的个数*/for(i=0;i<Lenght;i++)if(p->line[i]>=48&&p->line[i]<=57)〃 用ASCII码来进行比较,48与57之间是数字co++;}while((p=p->next)!=NULL); //遍历链表不为空returnco;}intLetter(ESS*h)//统计字母{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);/*计算当前line里的数据元素的个数*/for(inti=0;i<Lenght;i++)if((p->line[i]>='a'&&p->line[i]<='z')||(p->line[i]>='A'&&p->line[i]<='Z'))/*计算字母数*/co++;}while((p=p->next)!=NULL); //遍历链表不为空returnco;/*返回文章的字母总数*/}intchinese(ESS*h)〃统计符号{ESS*p=h;intco=0;intLenght;do{/*计算Lenght=strlen(p->line);/*计算当前line里的数据元素的个数/*计算if((p->line[i]>=1&&p->line[i]<=254))字符数字以及符号*/co++;}while((p=p->next)!=NULL); //遍历链表不为空returnco; /*返回*/}intSpace(ESS*h)〃统计空格{ESS*p=h;intco=0;intLenght;do{Lenght=strlen(p->line);//计算当前line里的数据元素的个数for(inti=0;i<Lenght;i++)if(p->line[i]==32)co++;//计算空格数,空格 ASCII码为32}while((p=p->next)!=NULL); //遍历链表returnco;}intCountAII(ESS*h)〃统计文章字数{//保存链表的首地址////保存链表的首地址//计算总字符数II遍历链表intco=0;do{co+=strlen(p->line);}while((p=p->next)!=NULL);
returnco;intFind(ESS*h,char*s)〃统计s出现次数{ESS*p=h;intco=0;intlen1=0;intlen2=strlen(s);{ESS*p=h;intco=0;intlen1=0;intlen2=strlen(s);inti,j,q;do{len1=strlen(p->line);for(i=0;i<len1;i++){if(p->line[i]==s[0]){q=0;for(j=0;j<len2;j++)}}}while((p=p->next)!=NULL);returnco;/*保存当前行的总字符数*//*待统计字符串的长度*/if(p->line[j+i]==s[j])q++;if(q==len2) {co++;i=i+q_1;}/*当前行的字符数*//*字符匹配*//*遍历链表*/voiddelstring(char*s,char*str)/**s为输入的字符串,*str为将要删除的字符*/{char*p=strstr(s,str); /*从字符串s中寻找str第一次出现的位置*/charm[80];intlen=strlen(s);inti=len-strlen(p);〃比较两串字符串之间的字符个数intj=i+strlen(str);intco=0;for(intk=O;k<i;k++)m[co++]=s[k];for(intn=j;n<len;n++)m[co++]=s[n];m[co]='\0';strcpy(s,m); /*返回新的字符串*/}
voidDelString(ESS*h,char*str){ESS*p=h;do{if(strstr(p->line,str)!=NULL)delstring(p->line,str);〃调用删除每个字符串,只删一次。}while((p=p->next)!=NULL);}voidOut(ESS*&h)//{ESS*p=h;do{printf("%s\n",p->line);〃显示字符串}while((p=p->next)!=NULL); /*遍历链表*/}voiddisplay(){printf("\n");printf("\n");printf("*********************************************printf("********************printf("********************^统计数^字******************、门");printf("********************printf("********************^统计字母******************、n")・printf("********************^统计空^格****************printf("********************统计文章总字数************\n");printf("********************统计重复字符串************\n");printf("*****************
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医疗用品制造项目合作计划书
- 2024年精制香米购销合同模板1
- 2024年管件购销标准合同格式版B版
- 2025借贷抵押合同格式
- 2025年办公商业空间设计合作协议书
- 2024年知识产权许可合同:许可使用的知识产权、许可范围及费用
- 2025年度高新技术企业人才聘用合同协议书3篇
- 2024年物联网智能家居系统集成分包合同
- 2025年环保监测与安防监控系统集成合同3篇
- 2024年特色商品小卖部连锁加盟合同规范文本3篇
- 国家开放大学《理工英语1》边学边练参考答案
- 国家开放大学电大专科《管理会计》期末试题及答案
- 内蒙古师范大学论文封面
- 移交涉密载体签收单(模板)
- (整理)《运筹学》期末考试试题与参考答案
- 机动车检测站内部管理制度.doc
- (完整版)《金匮要略》方剂总汇(完整版)
- 供电服务突发事件专项应急预案
- 美国签证在职收入证明中英文对照模版
- 中铁集团会计核算手册
- 光缆线路基础知识
评论
0/150
提交评论