利用栈实现一个编辑器
2016-03-06 20:23
316 查看
再来看一个行编辑程序的示例,用户在终端输入字符,完成后保存用户的数据区, 因为在输入的过程中可能出错,需要修改,所以不可能每输入一个字符就存入数据区。比较好的做法是先在内存里开一个输入的缓冲区,当用户输入完成一行后,再存入数据区。在行内可以修改。例如,当用户发现刚输入的一个字符是错的之后,可以再输入一个'#',表示前一个字符是错的,如果发现当前行输入的错误太多,可以输入一个退行符'@',表示当前行都无效,举个例子:
whli#ilr#e(s#*s)
outcha@putchar(*s=#++)
实际有效的字符是这样的:
while(*s)
putchar(*s++)
解题思路:
可以把内存里这个输入缓冲区定为栈,正常情况下每输入一个字符直接入栈,如果发现字符是'#',就栈顶pop一次,如果是'@'就清空栈.代码实现如下:
whli#ilr#e(s#*s)
outcha@putchar(*s=#++)
实际有效的字符是这样的:
while(*s)
putchar(*s++)
解题思路:
可以把内存里这个输入缓冲区定为栈,正常情况下每输入一个字符直接入栈,如果发现字符是'#',就栈顶pop一次,如果是'@'就清空栈.代码实现如下:
#include<iostream> #include<stdio.h> #include<stdlib.h> const int S_SIZE =100; //栈的空间大小 using namespace std; typedef struct { int top; //栈顶 int maxtop; //栈最大的存储空间 char *stack; }SqStack; //初始化空栈 void InitStack(SqStack &S) { S.stack=(char*)malloc(S_SIZE*sizeof(char)) ;//动态申请一维数组 S.maxtop=S_SIZE; S.top=-1; } //判断空栈 int StackEmpty(SqStack &S) { if(S.top==-1) return 1; else return 0; } //判断栈满 int StackFull(SqStack &S) { if(S.top==S.maxtop) return 1; else return 0; } //进栈 void push(SqStack &S,char x) { if(StackFull(S)) printf("overflow\n"); S.stack[++S.top]=x; } //出栈 void pop(SqStack &S) { if(StackEmpty(S)) printf("underflow\n"); S.top--; } void clear(SqStack &S) { S.top=-1; } void print(SqStack &S) { for(int i=0;i<=S.top;i++) cout<<S.stack[i]; cout<<endl; } int main() { char c; SqStack s; while((c=getchar())!=EOF) { InitStack(s); //对第一个字母的处理,当时漏了这一步结果第一个字母怎么都显示不出来 if(c=='#') pop(s); else push(s,c); while((c=getchar())!='\n') { if(c=='#') pop(s); else if(c=='@') clear(s); else push(s,c); } print(s); } return 0; }
相关文章推荐
- 给vs2012添加glut库
- .Net之美读书系列(一):委托与事件
- 为什么Android要采用Binder作为IPC机制?
- (java) Convert Sorted Array to Binary Search Tree
- [重拾]深入理解gulp自动化
- Java8中Lambda表达式的10个例子
- 蓝桥杯--危险系数
- JVM 内存 (堆(heap)、栈(stack)和方法区(method) )
- 快捷键
- 字节、字符和编码集
- Android开发笔记(二)
- 在树莓派2代B型/3代 上安装Fedora23 - Installing Fedora 23 on Raspberry Pi 2 model B or Raspberry Pi 3
- Java [Leetcode 319]Bulb Switcher
- POJ 3009 DFS+剪枝
- POJ 3009 DFS+剪枝
- Java多线程学习(五)
- Android Volley完全解析(三),定制自己的Request
- ZooKeeper 笔记(4) 实战应用之【消除单点故障】
- hash学习笔记
- 7行核心代码对任何数据进行军事级别的加密或解密