数据结构实验之栈与队列九:行编辑器

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。

由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的。较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正。例如,当用户发现刚刚键入的一个字符是错的时,可补进一个退格符"#",以表示前一个字符无效;

如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符"@",以表示当前行中的字符均无效。

如果已经在行首继续输入'#'符号无效。

Input

输入多行字符序列,行字符总数(包含退格符和退行符)不大于250。

Output

按照上述说明得到的输出。

Sample Input

whli##ilr#e(s#*s)

outcha@putchar(*s=#++);

Sample Output

while(*s)

putchar(*s++);

Hint

Source

cz

#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct node
{
char data;
struct node *next;
}Node; typedef struct stack
{
Node *base,*top;
int len;
}Stack; Node *newnode()//建立节点
{
Node *t;
t = (Node *)malloc(sizeof(Node));
t->next = NULL;
return t;
}; Stack *Newstack()//建立新栈
{
Stack *t;
t = (Stack *)malloc(sizeof(Stack));
t->top = newnode();
t->base = t->top;
t->len = 0;
return t;
} void push(Stack *t,char x)//入站
{
Node *p = newnode();
p->data = x;
p->next = t->top->next;
t->top->next = p;
t->base = p;
t->len++;
} char top(Stack *t)//询问栈顶元素
{
return t->top->next->data;
} void pop(Stack *t)//出栈
{
Node *p;
p = t->top->next;
t->top->next = t->top->next->next;
free(p);
t->len--;
} int empty(Stack *t)//询问栈是否为空
{
if(t->top->next==NULL)
return 1;
return 0;
} void del(Stack *t)//清空栈
{
while(!empty(t))
pop(t);
} void show(Node *t)
{
if(t==NULL)
return;
show(t->next);
if(t)
printf("%c",t->data);
} int main()
{
char s[255];
int i,n;
Stack *t;
t = Newstack();
while(gets(s)!=NULL)
{
del(t);
n = strlen(s);
for(i=0;i<n;i++)
{
if(s[i]=='@')
del(t);
else if(s[i]=='#')
{
if(!empty(t))
pop(t);
}
else
push(t,s[i]);
}
show(t->top->next);
printf("\n");
}
return 0;
}

顺序表

#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct Static
{
char *top,*base;
}Static; Static newStatic()
{
Static t;
t.top = (char *)malloc(100050*sizeof(char));
t.base = t.top;
return t;
} char top(Static t)
{
return *(t.top-1);
} void pop(Static *t)
{
t->top--;
} void push(Static *t,char x)
{
*(t->top++) = x;
} int empty(Static t)
{
if(t.base==t.top)
return 1;
return 0;
} void clear(Static *t)
{
while(!empty(*t))
pop(t);
} int main()
{
char s[255];
int n,i;
Static k;
k = newStatic();
while(scanf("%s",s)!=EOF)
{
n = strlen(s);
if(!empty(k))
clear(&k);
for(i=0;i<n;i++)
{
if(s[i]=='@')
clear(&k);
else if(s[i]=='#')
{
if(!empty(k))
pop(&k);
}
else
push(&k,s[i]);
}
i = 0;
while(!empty(k))
{
s[i++] = top(k);
pop(&k);
}
s[i] = '\0';
i--;
while(i>=0)
{
printf("%c",s[i]);
i--;
}
printf("\n");
}
return 0;
}

SDUT-1479_数据结构实验之栈与队列九:行编辑器的更多相关文章

  1. SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...

  2. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  3. SDUT-3335_数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 堆栈是一种基本的数据结构.堆栈具 ...

  4. SDUT-3334_数据结构实验之栈与队列七:出栈序列判定

    数据结构实验之栈与队列七:出栈序列判定 Time Limit: 30 ms Memory Limit: 1000 KiB Problem Description 给一个初始的入栈序列,其次序即为元素的 ...

  5. SDUT-3332&3333_数据结构实验之栈与队列五:下一较大值

    数据结构实验之栈与队列六:下一较大值 Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 对于包含n(1<=n<=1 ...

  6. SDUT-2134_数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给你一串字符,不超过50个字符,可能 ...

  7. SDUT-2133_数据结构实验之栈与队列三:后缀式求值

    数据结构实验之栈与队列三:后缀式求值 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运算符的后缀表示式 ...

  8. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  9. SDUT-2131_数据结构实验之栈与队列一:进制转换

    数据结构实验之栈与队列一:进制转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个十进制非负整数,将其转换成对 ...

随机推荐

  1. 手机前端开发调试利器-vConsole

    最近因为做抽奖页面,在android上可以使用手机连上电脑后用chrome浏览器chrome://inspect进行页面探测,但是ios中的页面就不能这样探测 在网上搜索后发现此插件,大大解决了问题 ...

  2. angular4 动态创建组件 vs 动态创建模板

    实现  模拟场景:页面上"帮助"按钮的点击触发帮助文档的弹出框,且每个页面的帮助文档不一样 因此弹出框里的帮助文档是一个动态模板而不是动态组件 以下comp均代表Type类型的动态 ...

  3. proteus 8.8 直装版提示Symbol $MKRORIGIN used but not found in libraries 安装后没有库

    用管理员运行程序,然后再通过菜单打开仿真文件是没问题. 解决方法:通常的安装目录是C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Prof ...

  4. Git同账号多平台配置

    最近工作中使用到了Git,虽然以前学习过,但是已经忘的差不多了,遂将本次配置过程整理成笔记以备忘 生成公钥 ssh-keygen -t rsa -C "gana10007@163.com&q ...

  5. Leetcode71. Simplify Path简化路径

    给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如, path = "/home/", => "/home" path = &qu ...

  6. OpenSmtp 发送邮件

    1.采用发送一个简单邮件 示例: private int smtpPort; private string smtpHost; private int recieveTimeout; private ...

  7. oracle -视图 序列 约束

    1.视图 视图是基于一个或者多个表数据库对象,视图允许用户创建一个无数据的”伪表“,视图只是一个获取特定列好行的sql查询组成,通过视图检索数据就像从表中检索数据 一样. 视图可以提供一个附加的安全层 ...

  8. excel之VLOOKUP函数的使用

    VLOOKUP 函数是excel中比较常用的一个函数.该函数具有有四个参数: 1.查找值:指本表中的值,需要根据本表中的某一值在本表或其他表中查找我们想要获取的值就称为查找值. 2.数据表:指查找的范 ...

  9. Hadoop 无法启动的问题

    最近乱搞把本来就快要挂了的hdfs又给弄坏了.问题如下, 应该是节点没有启动. [hadoop@namenode hadoop]$ hadoop dfsadmin -report Configured ...

  10. typescript+react+antd基础环境搭建

    typescript+react+antd基础环境搭建(包含样式定制) tsconfig.json 配置 // 具体配置可以看上面的链接 这里module moduleResolution的配置都会影 ...