栈的应用二 行编辑程序
当用户发现刚刚刚输入的一个字符是错的时,可补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多或难以补救,则可以键入一个退行符“@”,以表示当前行中的字符均无效;
思路:
每当拿到一个字符后进行判别:
如果它既不是退格符也不是换行符,则将该字符压入栈顶;如果是一个退格符,判断栈内是否为空,不为空则从栈顶删去一个字符;如果它是一个退行符,则将字符栈清为空栈;
代码如下:
import java.util.ArrayList;import java.util.LinkedList;public class Compile { public static void main(String[] args) { System.out.PRintln(lineEdit("{[]@([])##}")); } public static String lineEdit(String cc){ LinkedList<Character> stack=new LinkedList<Character>(); int len = cc.length(); for (int i = 0; i < len; i++) { switch (cc.charAt(i)) { case '#': if(stack.size()!=0){ stack.pop(); break; } case '@': stack.clear(); break; default: stack.push(cc.charAt(i)); break; } } ArrayList<Character> li = new ArrayList(stack); StringBuffer sbr=new StringBuffer(); for (int i = li.size()-1; i >-1; i--) { sbr.append(li.get(i)); } return sbr.toString(); } }
新闻热点
疑难解答