gpt4 book ai didi

java - 反转字符串中的字符

转载 作者:行者123 更新时间:2023-12-02 02:44:26 26 4
gpt4 key购买 nike

我正在尝试反转字符串中的单词。考虑一个字符串“我的名字是 abc”。预期输出应该是“cba si eman yM”。但我得到的输出为“cba si emanyM”。最后的空白字符有问题。有人可以帮助我吗?

我试图从末尾反转字符串这是代码

void reverse(String str)
{
int i = str.length() - 1;
char[] arr = str.toCharArray();
for(int j = arr.length - 1; j > 0; j--){
if(arr[j] == ' '){
swap(arr,i, j);
i = j - 1;
}
}
System.out.println( new String(arr).toString());
}

void swap(char[] s,int start, int end){
while(start > end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start --;
end++;
}
}
public static void main(String args[])
{
String str = "My name is abc";
ReversWords r = new ReversWords();
r.reverse(str);
}

最佳答案

正如我在评论中指出的,您想要的示例输出:

cba si eman yM

表明您不想反转每个单词,而只是反转整个字符串。

但是,让我们假设这是错误的,正如您的标题所示,您想要反转每个单词中的字母,使单词保持原始顺序,因此您想要的输出是:

yM eman si cba

当我运行你的代码时,我得到的输出是:

Myeman si cba

主要问题是只有当单词前面有空格时才反转它们。此测试因第一个单词而失败。在 reverse 中,退出循环后,您需要在打印结果之前从 0 交换到 i

您还有一个问题,因为空格最终出现在交换单词的末尾,这就是为什么“My”和“name”之间的空格似乎消失了。换句话说,如果您打印“_”来代替每个空格,则当前代码的输出是:

Myeman_si_cba_

要解决此问题,请在调用 swap 时不要包含空格。 reverse 方法应如下所示:

void reverse(String str) {
int i = str.length() - 1;
char[] arr = str.toCharArray();
for(int j = arr.length - 2; j > 0; j--){
if(arr[j] == ' '){
swap(arr,i, j + 1);
i = j - 1;
}
}
swap(arr, i, 0);
System.out.println( new String(arr).toString());
}

输出:

yM eman si cba

关于java - 反转字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867188/

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