5.文章编辑系统的设计与实现

5.1问题的描述

输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;

5.2问题分析和任务定义

(1)分别统计出其中英文字母数和空格数及整篇文章总字数;

(2)统计某一字符串在文章中出现的次数,并输出该次数;

(3)删除某一子串,并将后面的字符前移。

存储结构使用线性表,分别用几个子函数实现相应的功能;

输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:

(1)分行输出用户输入的各行字符;

(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"

(3)输出删除某一字符串后的文章;

5.3 数据类型和系统设计

1)存储结构设计

使用链表存储结构

2)系统功能设计

5.4 编码实现

#include <string.h>

#include <stdio.h>

typedef struct line           //定义串结构

{

char *data;             //定义指向字符的指针

struct line *next;          //定义指向下一个结点的指针

}LINE;

(1)创建链表,向里面输入文本数据

void OutPut(LINE * &head)  //向屏幕输出文字

{

LINE *p=head;            //定义指针p

do{

printf("%s\n",p->data);

}

while((p=p->next)!=NULL);      //遍历链表

printf("\n");

}

(2)主函数

void menu(){

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 ("请输入文章,每行最多80个字符,以Ctrl+E(^E)为结束符\n");

LINE *p=new LINE;              //首先为链表建立一个附加表头结点

head=p;                        //将付给表头指针

char tmp[100];

while(1)

{

gets(tmp);                  //输入字符串

if(strlen(tmp)>80)

{

printf("每行最多输入80个字符!");

break;

}

if(tmp[0]==5)break;          //如果发现输入^E,则退出输入

p=p->next=new LINE;

p->data=new char[strlen(tmp)+1];        //为结点分配空间

strcpy(p->data,tmp);

if(tmp[strlen(tmp)-1]==5)    //除去最后一个控制符^E

{

p->data[strlen(tmp)-1]='\0';

break;

}

}

p->next=NULL;                  //最后一个指针为空

head=head->next;

printf("\n");

menu();

}

(3)统计英文字母数

void CountLetter(LINE * &head)    //统计英文字母数

{

LINE *p=head;

int count=0;

do{

int Len=strlen(p->data);  //计算当前data里的数据元素个数

for(int i=0;i<Len;i++)

if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z'))

count++;

}                              //计算字母数

while((p=p->next)!=NULL);      //遍历链表

printf("文章中英文字母个数: %d \n", count);//返回文章里

printf("******************************\n");

printf("\n");

menu();

}

(4)统计数字数

void CountNumber(LINE * &head)

{

LINE *p=head;

int count=0;

do{

int Len=strlen(p->data);

for(int i=0;i<Len;i++)

if(p->data[i]>=48 && p->data[i]<=57)count++;

}

while((p=p->next)!=NULL);

printf("文章中数字个数: %d \n",count);

printf("******************************\n");

printf("\n");

menu();

}

(5)统计空格数

void CountSpace(LINE * &head)

{

LINE *p=head;

int count=0;

do{

int Len=strlen(p->data);

for(int i=0;i<Len;i++)

if(p->data[i]==32)count++;

}

while((p=p->next)!=NULL);

printf("文章中空格个数: %d \n", count);

printf("******************************\n");

printf("\n");

menu();

}

(6)显示所有字母的个数

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");

printf("\n");

menu();

}

(7)寻找字符串

void FindString(LINE * &head)

{

LINE *p=head;

int count=0;

int len1=0;

int len2;

int i,j,k;

char str1[20];

printf("\n");

printf("请输入要统计的字符串:");

scanf("%s",str1);

len2=strlen(str1);

do {

len1=strlen(p->data);

for(i=0;i<len1;i++)

{

if(p->data[i]==str1[0])

{

k=0;

for(j=0;j<len2;j++)

if(p->data[i+j]==str1[j]) k++;

if(k==len2)    {count++;i=i+k-1;}

}

}

}

while((p=p->next)!=NULL);//遍历链表

printf("该字符串在文中出现的次数: %d \n",count);

printf("******************************\n");

printf("\n");

menu();

}

(8)删除目标字符串

void delstringword(char *s,char *str)          //删除指定的字符串

{                        //*s为输入的字符串,*str为将要删除的字符

char *p=strstr(s,str);    //从字符串中寻找str第一次出现的位置

char tmp[80];

int len=strlen(s);

int i=len-strlen(p);

int j=i+strlen(str);

int count=0;

for(int m=0;m<i;m++)tmp[count++]=s[m];

for(int n=j;n<len;n++)tmp[count++]=s[n];

tmp[count]='\0';

strcpy(s,tmp);

}

void DelString(LINE * &head)

{

LINE *p=head;

char str[20];

printf("请输入要删除的字符串: ");

scanf("%s",str);

do

{

if(strstr(p->data,str)!=NULL)delstringword(p->data,str);

}

while((p=p->next)!=NULL);

printf("删除指定字符串后的文章为: \n");

OutPut(head);

printf("******************************\n");

printf("\n");

menu();

}

int main()

{

LINE *head;

int i;

Create(head);

for(;;)

{

printf("执行指令: ");

scanf("%d",&i);

switch(i)

{

case 1:CountAll(head);break;

case 2:CountSpace(head);break;

case 3:CountNumber(head);break;

case 4:CountLetter(head);break;

case 5:DelString(head);break;

case 6:FindString(head);break;

default:printf("指令输入错误\n\n");

}

}

}

5.5 测试结果

1.输入文章:

2.进行功能操作

文章编辑系统的设计与实现相关推荐

  1. 文章发布系统的设计与实现

    摘 要 随着计算机技术的迅速发展,网络正以一种前所未有的冲击力影响着人类的生产和生活.网络的快速发展,颠覆了传统的信息传播方式,冲破了传统的时间,空间的局限性,继而引发了人类阅读方式的变革.现如今,网 ...

  2. 基于java的文章发布系统的设计与实现

    文章发布系统的设计与实现项目,基本功能包括:网站信息.基础信息.系统管理.个人信息等.本系统结构如下: (1)网站信息: 网站介绍 文章管理:实现添加文章,查询文章功能 文章评论管理:实现根据评论信息 ...

  3. Java、JSP等文章发布系统的设计与实现

    技术:Java.JSP等 摘要: 随着计算机技术.网络技术.通信技术的迅速发展和人们生活水平及需要的不断提高,目前,网络正以一种前所未有的冲击力在影响着人类的活动,包括人类的生产和日常生活.网络的快速 ...

  4. 交互式二维图形编辑系统 课程设计 代写

    一个简易二维图形编辑软件,主要功能有: 1.具有菜单功能,通过菜单执行各种操作: 2.利用橡皮条技术绘制各种图元,如直线,圆,圆弧,多边形等 3.能够实现交互式绘制各种样条曲线 4.能够拾取图形,并修 ...

  5. 【java毕业设计】基于java+SSH+jsp的文章发布系统设计与实现(毕业论文+程序源码)——文章发布系统

    基于java+SSH+jsp的文章发布系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+SSH+jsp的文章发布系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  6. “校园舆情监测系统”网站设计及网页编辑总结

    "校园舆情监测系统"网站设计及网页编辑总结 这是很早之前,13年左右在做舆情系统前端时写的一些总结,现在放到博客上,以防丢失. 后端使用Django Web 框架. 前端使用dja ...

  7. 成绩分析系统php,考试成绩分析系统的设计与实现(有源程序代码)(可编辑).doc...

    考试成绩分析系统的设计与实现(有源程序代码)(可编辑).doc 考试成绩分析系统的设计与实现(有源程序代码) 关键词:成绩管理;统计分析;ASP;SQL Server The Design and I ...

  8. 【计算机毕业文章】科研项目验收系统的设计与实现

    本 科 毕 业 设 计 (论 文) 题目:某职院科研项目验收系统的设计与实现 摘 要 目前我国的互联网技术正在飞速发展.智能化.信息化的管理系统层出不穷.在国家重视科研发展的背景下,国内高等职业院校对 ...

  9. 基于SpringBoot的乡村医生诊疗系统的设计与实现

    项目编号:BS-YL-016 运行环境: 开发工具:IDEA / ECLIPSE 数据库:MYSQL5.7+Redis 应用服务器:TOMCAT8.5.31 JDK:1.8 后台开发技术:Spring ...

最新文章

  1. 2021高考成绩一分段查询陕西省,2021年陕西高考一分一段表查询排名方法 成绩排名位次什么时候公布...
  2. go例子(一) 使用go语言实现linux内核中的list_head
  3. CSS设置图片的对齐
  4. PHP7 学习笔记(六)403 Forbidden - WAMP Server 2.5
  5. SurfaceView 拍照功能
  6. BufferQueue 和 gralloc
  7. Ubuntu系统lamp环境下安装wordpress、zencert和mangento程序网站
  8. taro 如何使用dom_taro创建的小程序项目怎么引用ant design mobile UI库
  9. perl novel可变剪接识别(1)
  10. Javascript_备忘录1
  11. ffmpeg编程查看视频文件信息
  12. char *a 与char a[]所占空间解析题
  13. iso 国家名称列表
  14. VMware Tools
  15. style 标签属性 scoped 的作用和原理
  16. UE4 SetVisibility()和SetHiddenInGame()的比较
  17. Eclipse中查找-替换快捷键
  18. UR机器人(3)-精确设定TCP以及有效负载
  19. 三国演义人物词频统计-1
  20. 自我练习,梁的受力分析与约束的设置、简支、自由度约束对结果的影响。

热门文章

  1. 别老扯什么hadoop,你的数据根本不够大
  2. 【JAVA】十分钟带你了解java的前世今生
  3. 数据库(SQL)前戏 --- 你首先要会的数据库基础知识都在这里面(收藏版)
  4. 步进电机接线及注意事项
  5. 基于智慧防雷系统的大数据应用技术研究
  6. 项目需求分析难在哪里?
  7. tf47:SeqGAN
  8. kettle 连接数据库报错 (错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseException: Error occ)
  9. vue实现excel文件的导入和读取
  10. mysql与SQL SERVER 基本语法区别