Description
利用栈编写简单的行编辑程序:接受用户从终端输入的程序或数据,在输入过程中,允许用户输入出差错,并在发现有误时可以及时更正。例如:当用户发现刚刚键入的一个字符是错的时,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效。例如:假设从终端接受了这样两行字符: whli##ilr#e (s#*s) [email protected](*s=#++); 则实际有效的是下列两行: while (*s) putchar(*s++); 本题目给出部分函数,要求将行编辑函数补充完整,并完成整个程序。
思路:判断字符是否为‘#’,是则删除栈顶元素,否则将字符压进栈;判断字符是否为‘@’,是则清空栈,否则将字符压进栈;
代码演示:
void LineEdit() { SqStack s; char ch,c; int n,i; InitStack(s); scanf("%d",&n); ch=getchar(); for(i=1;i<=n;i++) { ch=getchar(); while(ch!=‘\n‘) { switch(ch) { case ‘#‘:Pop(s,c); break; // 仅当栈非空时退栈 case ‘@‘:ClearStack(s); break; // 重置s为空栈 default :Push(s,ch); // 有效字符进栈 } ch=getchar(); // 从终端接收下一个字符 } StackTraverse(s,visit); // 将从栈底到栈顶的栈内字符输出 ClearStack(s); // 重置s为空栈 } DestroyStack(s); }
时间: 2024-10-25 22:52:36