Description
阿美非常喜欢灵异类网络小说,经常需要在笔记本电脑上撰写网络小说。但很遗憾的是,阿美用的文字撰写软件中只有保存按钮,没有类似Word办公软件中的前进后退等功能。这就给阿美带来了较大的麻烦,于是找到阿亮求救,希望能够解决这个问题。阿亮听说后心里是那个美呀,平时阿美是那么的高冷,今天终于等到了亲密接触阿美的机会。
阿美向阿亮描述了自己的文本编辑需求,希望阿亮能够完善该功能:(1)每点击1次保存,则将当前文本状态进行保存;(2)最多保存10个状态,如果再次保存第11个状态,则将第1个状态销毁,依次类推。。。;(3)点击back按钮,则从当前状态的文本内容返回到上一个状态的文本内容,若没有上一个文本状态,则返回当前状态文本;(4)点击forward按钮,则从当前状态的文本内容前进到下一个状态的文本内容,若当前处于最新状态,则返回当前状态文本。
Input
有多行文本执行命令:
EDIT 字符串:代表编辑一行新文本并保存。
FORWARD:代表前进到下一个文本状态。
BACK:代表回到上一个文本状态。
QUIT:表示输入数据结束
说明:每个状态的文本内容最多不超过10000个英文字符;当遇到回车既是点击保存按钮,最多50个状态。
第一行一定是一个以EDIT开始的命令行,且作为第一个状态,也就是没有空白状态。
Output
所有命令执行结束时,阿美编写的小说内容。
Sample Input
EDIT 50年前,长沙镖子岭。
EDIT 四个土夫子正蹲在一个土丘上,所有人都不说话,直勾勾地盯着地上那把洛阳铲。
EDIT 铲子头上带着刚从地下带出的旧土,离奇的是,这一坏土正不停地向外渗着鲜红的液体…
EDIT “这下子麻烦大喽。”老烟头把他的旱烟在地上敲了敲,接着道,“下面是个血尸嘎,弄不好我们这点儿当当,都要撂在下面噢。”
BACK
BACK
BACK
FORWARD
QUIT
Sample Output
50年前,长沙镖子岭。
四个土夫子正蹲在一个土丘上,所有人都不说话,直勾勾地盯着地上那把洛阳铲。
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define sizezifu 50000
#define new_size 50
int mex;
typedef struct{
char **top;
char **base;
int size_top_base;
}zifu;
void init_zifu(zifu **s)
{
*s = (zifu*)malloc(sizeof(zifu));
(*s)->base= (char**)malloc(sizeof(char*)*new_size);
if (!(*s)->base) {
exit(-1);
}
(*s)->top = (*s)->base;
mex = (*s)->size_top_base = 0;
}
void push(zifu *s,char *st_r1)
{
s->top[s->size_top_base] = (char *)malloc(sizeof(char) * sizezifu);
strcpy(s->top[s->size_top_base],st_r1);
s->size_top_base += 1;
mex+=1;
}
void pop(zifu *s)
{
for(int i = 0;i < s->size_top_base;i++)
{
printf("%s\n",s->top[i]);
}
exit(-1);
}
int main(void)
{
char strr[20];
zifu *s;
init_zifu(&s);
while(scanf("%s",strr)!=EOF)
{
char strr1[3000];
switch(strr[0])
{
case 'E':
scanf("%s",strr1);
push(s,strr1);
break;
case 'B':
s->size_top_base -= 1;
if(s->size_top_base<=1)
{
s->size_top_base = 1;
}
break;
case 'F':
s->size_top_base += 1;
if(s->size_top_base>=mex)
{
s->size_top_base = mex;
}
break;
case 'Q':
pop(s);
}
}
return 0;
}