2013-02-05 45 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。