在字符串

时间:2016-03-13 12:53:10

标签: c++ string recursion swap

昨天我做了一个代码,用于交换字符串中彼此相邻的字母。举个例子:

input =“lalala”,output =“alalal”。或输入“bark”,output =“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);
  }

1 个答案:

答案 0 :(得分:0)

我知道你想写一个采用C风格字符串并将第一个字符移动到最后一个位置的方法,即“abcde” - &gt; “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;
}