2

我是编程新手,我正在学习初级编程课程。我试着四处寻找我的答案,我发现了可能有效的结果,但我不明白如何在使用堆栈时实现它们。我试图在不反转整个字符串的情况下反转字符串的单个单词。

例如:用户输入句子“Pies are great!” 我需要输出为“seiP era !taerg”

到目前为止,我已经成功编写了一个可以完全反转字符串的程序,因此使用上述示例的输出是:“!taerg era seiP” 正如您所看到的,我想在不反转顺序的情况下反转单词本身的话,但我必须使用堆栈输入。

以下是我到目前为止所拥有的:

public class ReversedString{

private static  ArrayStack<String> stack;

public static void main(String[] args) {
    stack = new ArrayStack<String>();
    String string = "";
    String stringReversed = "";

    @SuppressWarnings("resource")
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter the string that you want to reverse: ");
    string = scanner.nextLine();
    string.split(" ");

    for(int i=0; i<string.length(); i++){
        stack.push(string.substring(i, i+1));
    }   

    while(!stack.isEmpty()){
        stringReversed += stack.pop();
    }

    System.out.println("The reverse of the string is: " + stringReversed);
4

4 回答 4

1
read character
while character is whitespace
    // do nothing to skip multiple whitespaces.
    read character

while character is not whitespace
    push character onto stack
    read character

// Just read a word, so now dump it back out.
while stack is not empty
    ch = pop stack
    print ch

显然,这需要循环执行多个单词。

示例实现read character

int index = 0;
String theString = "Pies are great!"

char readCharacter()
{
    // TODO: needs error checking so you don't run off the end of the string.
    char ch = theString.charAt(index);
    index++;
    return ch;
}
于 2013-02-05T05:46:06.223 回答
0

尝试

    Scanner sc = new Scanner("Pies are great!");
    while(sc.hasNext()) {
        System.out.print(new StringBuilder(sc.next()).reverse() + " ");
    }

输出

seiP era !taerg 

或使用 java.util.Stack

    StringBuilder sb = new StringBuilder();
    Scanner sc = new Scanner("Pies are great!");
    while (sc.hasNext()) {
        Stack<Character> st = new Stack<>();
        for (char c : sc.next().toCharArray()) {
            st.push(c);
        }
        while (!st.isEmpty()) {
            sb.append(st.pop());
        }
        sb.append(' ');
    }
    System.out.print(sb);

输出

seiP era !taerg 
于 2013-02-05T05:53:47.530 回答
0

使用您已经编写的代码来使用堆栈反转整个字符串,并将其转换为自己的方法。您的堆栈对于以相反顺序(后进先出)检索字母很有用。就像是:

public String reverse(String str) {
  . . .
}

在您的 main 方法中,将您的 String 拆分为多个单词,然后将每个单词迭代地传递给您的 reverse 方法。不要为你的话使用堆栈。你的话是先进先出,堆栈提供后进先出。

于 2013-02-05T06:00:01.317 回答
0

用 white-space( " ") 分割句子,就像String#split你会得到分割的字符串,这些字符串将是单词(“Pies”、“are”、“great!”),然后将其压入堆栈并单独弹出值。

String str ="Pies are great!";
String[] strs = str.split(" "); // "Pies", "are", "great!"
String newStr = "";
for(String str1:strs){
   //push str1
   // pop str1 and add it to newStr
}
于 2013-02-05T05:45:57.530 回答