思路:
栈作为输入缓冲区,每当从终端了接受一个字符之后先做如下判别:
1:若是退格符#,从栈顶删去一个元素,即出栈Pop;
2:若是退行符@,将字符栈清空,即clear;
3:若不是#或@,即为有效字符,将该字符入栈,即Push;
顺序栈的代码:点击打开链接
只需将 typedef int ElemType -------->>> typedef char ElemType
#include"stack.h"
void LineEdit()
{
Stack st;
InitStack(&st);
char item;
int ch = getchar();
while(ch != EOF)//全文结束符
{
/*确定的某行编辑*/
while(ch != EOF && ch != '\n')//输入的字符不是结束符和回车符(行结束符)
{
switch(ch)
{
/*退格符(非空时出栈)*/
case '#':
if(!IsEmpty(&st))
Pop(&st,&item);
break;
/*退行符(清空栈)*/
case '@':
clear(&st);
break;
/*有效字符(未满时入栈)*/
default:
if(!IsFull(&st))
Push(&st,ch);
break;
}//switch
ch = getchar();
}//while
/*将字符栈的内容送至代用过程的缓冲区:此处仅仅将其打印出来*/
int i;
cout<<"the content is:";
for(i = 0;i<=st.top-1;++i)
{
cout<<st.base[i];
}
cout<<endl;
clear(&st);
/*全文未结束输入:进行下一行编辑*/
if(ch != EOF)
ch = getchar();
}
/*调用完之后,销毁栈,防止内存泄露*/
destory(&st);
}//LineEdit
int main()
{
LineEdit();
return 0;
}