HNCU 1741: 算法3-2:行编辑程序
题目描述
一个简单的行编辑程序的功能是:接收用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接收一个字符即存入用户数据区”的做法显然不是很恰当。较好的做法是,设立一个输入缓冲区,用以接收用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正。例如,当用户发现刚刚键入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内错误较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如假设从终端接收了这样的两行字符:
whil##ilr#e(s#*s)
outcha@ putchar(*s=#++);
则实际有效的是下列两行:
while(*s)
putchar(*s++);
为此,可设这个输入缓冲区为一个栈结构,每当从终端接收了一个字符之后先作如下判别:如果它不是退格符也不是退行符,则将该字符压入栈顶;如果是一个退格符,则从栈顶删去一个字符;如果它是一个退行符,则将字符栈清为空栈。上述处理过程可用下面算法描述之:
图:行编辑程序算法
输入
若干行程序或者数据,每行不超过200个字符。
输出
经过行编辑程序处理过后的输出。
样例输入
whil##ilr#e(s#*s)
outcha@ putchar(*s=#++);
样例输出
while(*s)
putchar(*s++);
类似于线性表里面顺序表,顺序栈,自己样例试了都没有错,只不过提交显示是话唠,不是很懂这个OJ。。
#include<stdio.h>
#include<stdlib.h>#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemtype;
typedef int Status;typedef struct {SElemtype *base;SElemtype *top;int stacksize;
}SqStack;Status InitStack(SqStack *p)//初始化栈
{p->base = (SElemtype*)malloc(STACK_INIT_SIZE*sizeof(SElemtype));if(!p->base )exit(OVERFLOW);p->top = p->base ;p->stacksize = STACK_INIT_SIZE;return OK;
}Status ClearStack(SqStack *q)//清空栈
{if(q->base == q->top )return ERROR;q->top = q->base ;return OK;
}Status Pop(SqStack *q,char *ch)//出栈
{if(q->base == q->top )return ERROR;*ch = *--(q->top);return OK;
}Status Push(SqStack *q,char *ch)//入栈
{SElemtype *newbase;if((q->top -q->base ) >= q->stacksize ){newbase = (SElemtype*)realloc(q->base,(q->stacksize +STACKINCREMENT)*sizeof(SElemtype));if(!newbase)exit(OVERFLOW);q->base = newbase;q->stacksize += STACKINCREMENT;}*(q->top) ++ = *ch;return OK;
}
Status StackEmpty(SqStack *q)//判断是否为空
{if( q->base == q->top )return OK;return ERROR;
}Status DestroyStack(SqStack *q)
{q->base = NULL;return OK;
}
void LineEdit()
{//利用字符栈s,从终端接收一行并传送至调用过程的数据区 SqStack p;SElemtype *s;char ch;InitStack(&p);//构造空栈 ch = getchar();//从终端接收第一个字符 while(ch!=EOF)//EOF为全文结束符 {while(ch!=EOF&&ch!='\n'){switch(ch){case '#':Pop(&p,&ch);break;//仅当栈非空时退栈 case '@':ClearStack(&p);break;//重置p为空栈 default :Push(&p,&ch);break;//有效字符进栈,未考虑栈满的情形 }ch = getchar();//从终端接收下一个字符 }s = p.base ;while(s != p.top ){ch = *s;putchar(*s);s++;}printf("\n");//将从栈底到栈顶的栈内字符传送至调用过程的数据区 ClearStack(&p);if(ch!=EOF)getchar();//读取下一行的第一个字符 }DestroyStack(&p);
}
int main()
{LineEdit();return 0;}
转载于:https://www.cnblogs.com/hellocheng/p/7350136.html
HNCU 1741: 算法3-2:行编辑程序相关推荐
- 数据结构课程设计—简单行编辑程序
简单行编辑程序 一.引言 1.1 问题的提出 文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入.删除等修改操作.限制这些操作以行为单位进行的编辑程序称为行编辑程序. 被编辑的文 ...
- 初学者指南:什么是算法?11行伪代码给你讲明白
导读:本文带你熟悉一个重要的术语--算法. 作者:帕诺斯·卢里达斯(Panos Louridas) 来源:大数据DT(ID:hzdashuju) 算法(algorithm)就是一个过程,是一种特殊的过 ...
- 在Matlab实现Kmeans算法(每行代码带注释)
目录 一.前言 二.VQ概述 三.Kmeans算法 K-means 的算法步骤为: 四.Matlab代码实现过程 五. 一点点可选改动(个人看法) 参考链接: 一.前言 本人对机器学习.人工智能算法方 ...
- HNCU 1328: 算法2-18~2-19:双向循环链表
<数据结构> 2.3 循环链表 http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id= ...
- Matlab实现Kmeans算法(每行代码标注详细注解)
本文主要为了完成平日作业,并进一步加深对算法的理解.也希望对来访的读者有所帮助. 目录 一.什么是Kmeans算法 二.Kmeans算法的意义 三.Kmeans算法代码解析 1.关键概念 2.大致思路 ...
- Matlab实现DBSCAN算法(每行代码标注详细注解)
本文主要为了完成平日作业,并进一步加深对算法的理解.也希望对来访的读者有所帮助. 目录 一.什么是DBSCAN算法 二.DBSCAN算法的意义 三.DBSCAN算法代码解析 1.关键概念 2.大致思路 ...
- HNCU 1746: 算法4-1,4-3:定位子串
题目描述 将子串在母串中第一次出现的位置找出来. 图1:在母串中第pos个位置定位子串的算法 图2:从母串中第pos个位置获得长度为len的子串 输入 若干对字符串,每对字符串占一行并用一个空格分开. ...
- C语言实用算法系列之行指针
代码 #include <stdio.h>void Test(double (*a)[3]) {printf("sizeof(a)=%d\n", sizeof(a)); ...
- QQ密码算法 用于命令行登录
以下启动QQ调用 QQ.exe /START QQUIN:[QQ号] [算出的密码] /STAT:[是否隐身] 隐身/不隐身: 40/41 例:D:\Program Files\Tencent\QQ ...
最新文章
- HLS中m3u8格式规范解读
- netty websocket客户端_Websocket操作字节序 之 服务端
- Java打印菱形(空格菱形)(星星之间有空格)
- 读书笔记九:TCP/IP详解之广播和多播,IGMP协议
- IOS15最标准的纯代码搭建项目
- pip安装mysql模块_使用pip安装mysql模块for python
- 水晶报表如何查看sql_有了这个报表工具,一键生成自定义的各种报表,还可以导出Excel...
- CSS——CSS创建样式表
- CSS基础必备知识点05
- Java基础(七)——文件、IO流
- 你真的理解机器学习中偏差 - 方差之间的权衡吗?
- elasticsearch sql插件 2.4及以下版本配置
- NodeJS运行时抛出: Error: listen EADDRINUSE :::3000
- springboot文件上传大小限制:The field file exceeds its maximum permitted size of 1048576 bytes
- solidworks电气元件3d库_丨部件库丨西门子3RV6电机保护开关
- MySQL从删库到跑路: 入门篇
- 推荐四个在线任务管理网站
- psd 将分组合并导出png图片
- 保驾护航政务企业上云,云上安全一马当先
- php导出复杂表头excel,js导出复杂表头(多级表头)的excel