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

スタックを使用して文字列全体を逆にするためにすでに記述したコードを取得し、それを独自のメソッドに変換します。スタックは、逆の順序(後入れ先出し)で文字を取得するのに役立ちます。何かのようなもの:

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

mainメソッドで、Stringを複数の単語に分割し、各単語をreverseメソッドに繰り返し渡します。単語にスタックを使用しないでください。あなたの言葉はFIFOであり、スタックはLIFOを提供します。

于 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 に答える
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 に答える