#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 215
typedef struct stankl{
char* top;
char* base;
int stacksize;
} stackl,*linkstack;
linkstack Initstack(){
stackl *l=NULL;
l->base=(char*)malloc(100* sizeof(char));
if(!l->base) exit(-1);
l->top=l->base;
*(l->top)=0;
l->stacksize=0;
return l;
}//对顺序栈进行初始化
void push(linkstack l,char ch){
if(l->stacksize==MAXSIZE) {
printf("空间已经满了!\n");
exit(-1);}
*l->top=ch;
l->top++;
l->stacksize++;
}//入栈操作
void pop(linkstack l){
if(l->top!=l->base){
l->top--;
*(l->top)=0;
l->stacksize--;
}
}//出栈操作
void allpop(linkstack l){
while(l->top>l->base){
pop(l);
}
if(l->top==l->base)*l->top=0;
}//全部出栈
void lineEdit(linkstack l){
char ch;
ch=getchar();
while(ch!=EOF){
while(ch!=EOF&&ch!='\n'){
switch(ch){
case '#':pop(l);
break;
case '@':allpop(l);
break;
default:push(l,ch);
break;
}
ch=getchar();
}
}
}//编辑输入
void ptf(linkstack l){
if((l->top==l->base)&&(*(l->top)==0))printf("你未输入或是您将输入的全部删掉了!");
else{
char k;
while(l->top>l->base){
k=*(l->top--);
printf("%c\n",k);
}
if(l->top==l->base){
k=*(l->top);
printf("%c\n",k);
}
}
}//输出所输入的内容
int main()
{
char a,b;
a='#';
b='@';
printf("请输入字符,%c作为回删键,%c作为全删键\n",a,b);
stackl*l;
l=Initstack();
lineEdit(l);
ptf(l);
printf("Hello world!\n");
return 0;
}