我在堆栈的帮助下编写程序。我必须解码输入。例如,' he-llo'这个词变成了' hllo',但我得到了'你好'。 ' - '应该具有删除前面和后面的字符的效果。 我知道我必须使用pop(我实现了自己的),但我连续两次使用它有问题。因为我实际上已经打印过' e'在第一个if语句中。我真的对如何解决这个问题一无所知,我打错了吗?或者我应该调整我的流行代码?
//my pop code
public char pop() {
if(!this.empty()){
if(top > 0){
temp = arr[top - 1];
arr[top -1] = 0;
top = top -1;
}
return temp;
}else{
return 0;
}
//handling the charachters of the input
if(Character.isLetter(ch) || Character.isDigit(ch)){
Stack.push(ch);
System.out.println(myStack.peek());
}
if(Stack.peek() == '-'){
myStack.pop();
myStack.pop();
System.out.println(Stack.peek());
}
}
答案 0 :(得分:0)
你的问题是关于连续两次使用pop - 是的,只要top代表堆栈中的至少两个对象,它就应该工作
如果您的实现使用数组,那么对于pop来说,Stack的语义有些错误。堆栈顶部(顶部)应该是您看到的对象;你的pop使用top - 1.其次,没有必要将弹出的对象设置为0,如果正确实现了Stack,push方法应该覆盖该值。鉴于上述情况,未正确使用空测试;空的应该测试顶部<如果是,则返回0,否则返回false。 stack [0]是一个合法的元素。或许对堆栈及其实现和操作进行了一些检查?
答案 1 :(得分:-1)
每当我进行字符串操作时,我总是使用StringBuilder
。它太有用了!
试试这个;
// please name this method properly
public static String someMethod(String str) {
StringBuilder builder = new StringBuilder(str);
for (int i = 0 ; i < builder.length() ; i++) {
if (builder.charAt(i) == '-') {
builder.deleteCharAt(i);
if (i > 0) {
builder.deleteCharAt(i - 1);
i--;
}
}
}
return builder.toString();
}