栈-行编辑程序

一个简单的行编辑程序的功能是,接受用户从终端输入的程序或数据,并存入用户的数据区,由于用户在终端上进行输入时,不能保证不出差错,因此,若在编辑程序中,每接受一个字符即存入用户数据区的做法显然不是最恰当的。

应该设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正。列如当用户刚发现键入的一个字符是错的时,可以补进一个退格符#,以表示前一个字符无效,如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符@,以表示当前行中的字符均无效。

输入:一行终端接受的字符.

输出:实际有效的字符。

运行结果:

算法思想:

设一个栈结构,每当从终端接受了一个字符之后。如果它既不是退格符也不是退行符,则将该字符压入栈顶。如果是一个退格符,则从栈顶删去一个字符,如果他是一个退行符,则将字符栈清为空栈。

算法实现:

void LineEdit(){
    //利用字符栈S,从终端接受一行并传送至调用过程的数据区
    //设一个栈结构,每当从终端接受了一个字符之后。如果它既不是退格符
    //也不是退行符,则将该字符压入栈顶。如果是一个退格符,则从栈顶删 
    //去一个字符,如果他是一个退行符,则将字符栈清为空栈。
    SqStack<char> S;
    char ch;
    char e;
    InitStack(S);//构造空栈
    ch=getchar(); //从终端接受第一个字符
    while(ch!=EOF){//EOF为全文结束符
        while(ch!=EOF&&ch!='\n'){
	     switch(ch){
             case '#': //当栈非空时退栈
	         Pop(S,e);
		 break;
              case '@': //重置S为空栈
		 ClearStack(S);
	         break;
	      default:
	         Push(S,ch); //有效字符进栈,为考虑栈满情形
	         break;
	      }
	      ch=getchar();//从终端接受下一个字符
	 }
	PrintStack(S);
        ClearStack(S);//重置栈为空栈
     	if(ch!=EOF)
	    ch=getchar();
    }
    DestroyStack(S);
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值