棧的應(yīng)用二 行編輯程序
當(dāng)用戶發(fā)現(xiàn)剛剛剛輸入的一個(gè)字符是錯(cuò)的時(shí),可補(bǔ)進(jìn)一個(gè)退格符“#”,以表示前一個(gè)字符無效;如果發(fā)現(xiàn)當(dāng)前鍵入的行內(nèi)差錯(cuò)較多或難以補(bǔ)救,則可以鍵入一個(gè)退行符“@”,以表示當(dāng)前行中的字符均無效;
思路:
每當(dāng)拿到一個(gè)字符后進(jìn)行判別:
如果它既不是退格符也不是換行符,則將該字符壓入棧頂;如果是一個(gè)退格符,判斷棧內(nèi)是否為空,不為空則從棧頂刪去一個(gè)字符;如果它是一個(gè)退行符,則將字符棧清為空棧;
代碼如下:
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(); } }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注