阿美的编辑器

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;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值