棧的應用二 行編輯程序
當用戶發現剛剛剛輸入的一個字符是錯的時,可補進一個退格符“#”,以表示前一個字符無效;如果發現當前鍵入的行內差錯較多或難以補救,則可以鍵入一個退行符“@”,以表示當前行中的字符均無效;
思路:
每當拿到一個字符后進行判別:
如果它既不是退格符也不是換行符,則將該字符壓入棧頂;如果是一個退格符,判斷棧內是否為空,不為空則從棧頂刪去一個字符;如果它是一個退行符,則將字符棧清為空棧;
代碼如下:
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(); } }
新聞熱點
疑難解答