gpt4 book ai didi

java - 颠倒句子中每个单词的字符而不颠倒词序

转载 作者:行者123 更新时间:2023-12-03 05:07:21 27 4
gpt4 key购买 nike

我有这段代码应该执行标题所说的操作,反转字符顺序而不更改单词顺序:

package stackTests;

import java.util.Scanner;
import java.util.Stack;


public class StackTest
{
Stack<Character> stack;

public StackTest()
{
stack = new Stack<Character>();
}

public String reverseString(String str)
{
int start = 0;
int start2 = 0;
int size;
char space = ' ';
char[] cArr;
Scanner scan = new Scanner(str);
cArr = str.toCharArray();
for (; start < cArr.length; start++)
{
if(cArr[start] == space || start == cArr.length - 1)
{
for (; start2 < stack.size(); start++)
{
System.out.print(stack.pop());
}
}
else
{
stack.push(cArr[start]);
}
start2 = 0;
}
return str;
}
}

如果我输入像“Hello”这样的单个单词,它会正常工作 - 它会输出“olleH” - 但一旦它变得比一个单词更复杂,它就会开始输出一些奇怪的东西。“你好,我的名字是”输出“ollehem”。我对 Stack 非常陌生,这是我第一次使用它们。不确定是否存在逻辑错误或者Stack使用不当。

最佳答案

您没有输出原始空格,这就是您看到奇怪结果的原因

这是修复版本:

public static void reverseString(final String str) {
final Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
final char c = str.charAt(i);
if (c == ' ') {
while (!stack.isEmpty())
System.out.print(stack.pop());
System.out.print(' ');
} else
stack.push(c);
}
while (!stack.isEmpty())
System.out.print(stack.pop());
}

另一个没有堆栈的版本,带有就地替换:

public static void reverseString(final String str) {
final char[] chars = str.toCharArray();
int start = 0;
for (int i = 0; i < chars.length; i++) {
if (chars[i] == ' ') {
reverse(chars, start, i - 1);
start = i + 1;
}
}
reverse(chars, start, chars.length - 1);
System.out.println(new String(chars));
}

private static void reverse(final char[] chars, int s, int e) {
while (s < e) {
final char t = chars[s];
chars[s] = chars[e];
chars[e] = t;
s++;
e--;
}
}

关于java - 颠倒句子中每个单词的字符而不颠倒词序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com