题目
使用栈实现行编辑程序
行编辑程序就是,当一个用户键入一个字符是错误的可以使用‘#
’字符进行退格,或则使用‘@’
退行
例如:whil##ilr#e(s#*s)
实际有效的为while(*s)
例如:outcha@putchar(*s=#++);
实际有效的为:putchar(*s++);
代码
// 行编辑程序
#include <iostream>
using namespace std;
typedef char ElemType;
/**
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode;
typedef struct LQueue{
LNode *front,*rear;
}LQueue;
void initLinkQueue(LQueue &Q){
Q.front=Q.rear=(LNode *)malloc(sizeof(LNode));
Q.front->next=NULL;
}
bool isEmpty(LQueue Q){
if(Q.front==Q.rear)
return true;
else
return false;
}
bool EnQueue(LQueue &Q,ElemType e){
LNode *p=(LNode *)malloc(sizeof(LNode));
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return true;
}
bool DeQueue(LQueue &Q,ElemType &x){
if(Q.front==Q.rear)
return false;
LNode *p=Q.front->next;
x=p->data;
Q.front->next=p->next;
if(p==Q.rear)
Q.rear=Q.front;
free(p);
return true;
}
void clearLQueue(LQueue &Q){
ElemType x;
while(!isEmpty(Q)){
DeQueue(Q,x);
}
}
**/
typedef struct Stack{
ElemType data[100];
int top;
}Stack;
void initStack(Stack &S){
S.top=-1;
}
bool stackisEmpty(Stack S){
if(S.top==-1)
return true;
else
return false;
}
bool push(Stack &S,ElemType e){
if(S.top==99)
return false;
S.data[++S.top]=e;
return true;
}
bool pop(Stack &S,ElemType &x){
if(S.top==-1)
return false;
x=S.data[S.top--];
return true;
}
void clearStack(Stack &S){
ElemType x;
while(!stackisEmpty(S))
pop(S,x);
}
void LineEdit(){
Stack S;
initStack(S);
ElemType e,x;
cin>>e;
while(e!='~'){
while(e!='~'&&e!='\n'){
switch(e){
case '#':pop(S,x);
break;
case '@':clearStack(S);
break;
default:push(S,e);
break;
}
cin>>e;
}
while(!stackisEmpty(S)){
pop(S,x);
cout<<x<<" ";
}
if(e!='~')
cin>>e;
}
}
int main() {
LineEdit();
return 0;
}
运行效果