2013-02-05 77 views
2

我是編程新手,我正在參加初級編程課程。我試過尋找我的答案,我發現可能有效的結果,但我不明白如何在使用堆棧時實現它們。我試圖在不顛倒整個字符串的情況下反轉字符串的單個單詞。如何在使用堆棧時反轉字符串中的單個單詞?

例如:用戶輸入句子「餡餅很棒!」我需要輸出爲「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); 
+0

如果你能夠扭轉字符串什麼是問題的話? – xyz

+0

我不明白如何利用堆棧推入字符串並彈出單個反向字詞。 – user2041920

+0

而不是完整的字符串推個別單詞,並做相同的處理,直到整個字符串處理。 – xyz

回答

0

拆分與白色空間(" ")像String#split您將獲得分割後的字符串,是詞的句子(「餡餅」,「是」 ,「太棒了!」),然後將其推入堆棧並單獨彈出該值。

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 
} 
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; 
} 
+0

這看起來最有前途,但我怎樣才能完全讀取字符串中的字符? – user2041920

+0

如果你已經有了字符串,你可以使用'charAt'並且只增加索引。我會編輯一個樣本。 – John3136

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 
+0

這正是我正在尋找的,但不幸的是,我們沒有在課堂上討論過StringBuilder,我不知道它是如何工作的。有沒有辦法做到這一點,而不使用StringBuilder? – user2041920

+0

使用java.util.Stack添加了一個版本... –

0

帶你已經編寫扭轉使用堆棧整串的代碼,並將其轉化爲自己的方法。您的堆棧對於以相反順序檢索字母很有用(後進先出)。例如:

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

在您的主要方法中,將您的字符串拆分爲多個單詞,並將每個單詞反覆傳遞給您的反向方法。不要爲你的文字使用堆棧。你的話是先進先出,並且一個堆棧提供LIFO。