在字符串中彼此相邻交换字母
Posted
技术标签:
【中文标题】在字符串中彼此相邻交换字母【英文标题】:swapping letters next to each other in a string 【发布时间】:2016-03-13 12:53:09 【问题描述】:昨天我做了一个代码来交换字符串中彼此相邻的字母。举个例子:
输入=“拉拉拉”,输出=“拉拉拉”。或输入“bark”,输出=“arkb”。 “b”在“a”旁边,我们交换。现在“b”在“r”旁边,我们再次交换。等等……
今天我再次尝试这样做,但没有循环并且在“void(char * x)”函数中。 我真的搞砸了,我试图弄清楚如何在函数中表达替换。我知道它是这样的: 温度=str1; str1=str2; str2=温度;
在当前代码中我只能反转字符串,但我不知道如何使用“temp[1]”参数...一些解释会很有帮助! :)
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
void swapper(char* str)
char temp[1];
if(*str)
swapper(str+1);
cout << *str;
int main ()
char str[6] = "angel";
cin >> str;
char temp[1];
swapper(str);
【问题讨论】:
我有点不确定你的“交换”……你不是把第一个字符移到最后吗? 你确定递归的swapper()
调用吗?
我也不确定,但我对 c++ 真的很陌生,我只习惯于使用 int 函数或字符串函数“返回值”.. 有没有可能我在这个函数中调用另一个函数,然后使用我上面使用的递归来表达“交换”?
你想达到什么目标?循环似乎是正确的方法。如果您想做一个全递归交换器,您可能必须将输入限制为长度为 2 的幂的字符串。然后你可以递归地交换字符串的每一半,直到你得到单个字符。
你没有交换任何东西,你只是在打印字符。任何地方也没有名为“temp”的参数。
【参考方案1】:
我了解到您想编写一个方法,该方法采用 C 风格的字符串并将第一个字符移动到最后一个位置,即“abcde”->“bcdea”。循环是这里最简单的方法,但是如果要使用递归,则需要编写
#include <iostream>
using namespace std;
void swapper(char* ptr)
if(*(ptr + 1)) //if ptr points to the last character, the next one is '\0' and the recurrence should end
//swap currant character with the next
char temp = *ptr;
*ptr = *(ptr + 1);
*(ptr + 1) = temp;
//alternatively, you can use ptr[0] and ptr[1] instead of *ptr and *(ptr + 1), it's exactly the same thing
//call swapper on the remainder of the string
swapper(ptr + 1);
int main ()
char str[6] = "angel";
swapper(str);
cout << str;
【讨论】:
//用下一个字符交换醋栗字符 temp = *ptr; *ptr = *(ptr + 1); *(ptr + 1) = 温度;当我使用“for循环”时,我做了同样的事情,但我没有使用任何指针。我认为“指针和引用”对我来说仍然很难理解,在转向递归之前我必须更多地练习它们。非常感谢您的帮助和良好的解释!! :)以上是关于在字符串中彼此相邻交换字母的主要内容,如果未能解决你的问题,请参考以下文章