我有一个问题,我需要使用堆栈/s反转第一个单词和第三个单词,并交换反转单词的位置



导入java.util.Scanner;导入java.util.Stack;

public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Please Enter a string: ");
String str = in.nextLine();
Stack<Character> stack = new Stack<>();
for(int i = 0; i < str.length(); i++){
stack.push(str.charAt(i));
}
System.out.println("Reverse:");
while(!stack.empty()){
System.out.print(stack.pop());
}
}
}

我所做的就是把整句话颠倒过来,例如";输入字符串:这是新常态";并且我的输出是";lamron wen eht si sihT";。

预期输出是什么:"输出:eht是sihT新常态">

使用堆栈/s反转第一个字和第三个换反转字的位置

您需要处理3件事:

  1. 识别输入行/字符串中的第一个单词并将其反转
  2. 识别输入行/字符串中的第三个单词并将其反转
  3. 交换反转的第一个和第三个单词

在您的逻辑中,您使用堆栈反转整个输入字符串,而不查找第一个或第三个单词。这就是您将整个输入以相反的格式作为输出的原因。

您需要按空格分割输入字符串以获得单词数组,只反转该数组中的第1个和第3个单词,并只交换这2个单词。最后,用空格连接所有单词(单词数组(以生成所需的输出。以下是解决问题的方法之一(这里是您的示例的工作示例(:

public class Main {
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Please Enter a string: ");

// split input string in to words by space
String[] words = in.nextLine().split(" ");

// performing reverse operation if 3 words are in the input at minimum
// else output is same as input
if (words.length >= 3) {
String rev1 = reverse(words[0]); // reverse word-1
String rev3 = reverse(words[2]); // reverse word-3
// swap word 1 and 3
words[0] = rev3;
words[2] = rev1;
}
System.out.println("Reverse: " + String.join(" ", words));
}

public static String reverse(String word) {
if (word == null) {
return word;
}
Stack<Character> stack = new Stack<>();
for(int i = 0; i < word.length(); i++){
stack.push(word.charAt(i));
}
StringBuilder sb = new StringBuilder();
while(!stack.empty()){
sb.append(stack.pop());
}
return sb.toString();
}
}

最新更新