1、文章编辑文章编辑 一、需求分析一、需求分析 功能:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过 80 个字符,共 N 行; 要求: (1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统 计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一子串,并将后 面的字符前移。 存储结构使用线性表,分别用几个子函数实现相应的功能; 输入数据的形式和范围: 可以输入大写、 小写的英文字母、 任何数字及标点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分 4 行输出“全部字母数“、 “数字个数“、“空格个数“、“文章总字数“(3
2、)输出删除某一字符串后的文章; 二、概要设计二、概要设计 1、定义结构体 struct line,文本行采用顺序存储,行与行之间采用链式存储 开始 主函数 输入文字统计个数查找某一子串 输出文字 统计字母、数字、空 格、某一字符串的个 数以及文章总字数 删除这一子串 输出删除后的文 章 具体操作 2、主要函数: int FindString(LINE * h=0;len1=0; len2=strlen(str); p-datai=str0 i+ k=0;j=0; p-datai+j=strj k+;j+; k=len2 count+; i=i+k-1; 结束 Y N Y N N Y 2 实现思
3、想: 从字符串 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 三、详细设计:三、详细设计: #include #include #include /*文本每行以字符串形式存储,行与行之间以链表存储*/ typedef struct line char *data; struct line *n
4、ext; LINE; /*创建一链表,同时向里面输入文本数据*/ void Create(LINE * LINE *p=new LINE; /*首先为链表 建立一个附加表头结点*/ head=p; /*将 p 付给 表头指针*/ char tmp100; while(1) gets(tmp); /*输入字符串!*/ if(strlen(tmp)80) printf(“每行最多输入80 字符“); str p i j s for(m=0;mdata=new charstrlen(tmp)+1; /*为结点分配空间 */ strcpy(p-data,tmp); if(tmpstrlen(tmp)-1=5) /*除去最后一个控制符 E */ p-datastrlen(tmp)-1=0; brea