字符串使用char *使用递归进行反转

时间:2015-02-20 03:58:12

标签: arrays pointers recursion char reverse

我想使用Recursion就地使用字符串反转。虽然这可能是重复的问题,但我不明白我的代码中的错误,我在这里问之前我搜索了答案。

#include "Reversal.h"
#include <iostream>
#include <cstdlib>

using namespace std;

int size = 10;
char* Reversal :: rever (char *str, int i, int j)
{
    if (i>=j)
        return str;
    char a;
    a = str[i];
    str[i] = str[j];
    str[j] = a;

    rever(str, i+1, j-1);
}

int main()
{
    Reversal obj;
    char *ptr = new char[size];
    char *reverse = new char[size];
    cout << " Enter a string \n";
    for (int i = 0; i < size-1; i++)
    {
        cin >> ptr[i];
    }

    reverse = obj.rever(ptr, 0, strlen(ptr)-1);

    for (int k = 0; k < strlen(reverse)-1; k++)
    {
        cout << reverse[k];
    }
    return 0;

}

和Reversal.h文件是

#ifndef REVERSAL_H_
#define REVERSAL_H_

class Reversal {
public:
    Reversal();
    char* rever(char*, int,int);
    virtual ~Reversal();
};

#endif /* REVERSAL_H_ */

1 个答案:

答案 0 :(得分:0)

这段代码有很多问题。您需要决定的第一件事是您是在正确地反转输入字符串,还是返回指向新分配的字符串的指针。既然看起来你计划填充第二个阵列,那就让我们坚持下去:

void Reversal::rever(char* buf, char* str, int i, int j)
{
    if (i>=j)
    {
        buf[strlen(str)] = '\0';
        return;
    }
    buf[j] = str[i];
    buf[i] = str[j];

    rever(buf, str, i+1, j-1);
}

被称为:

obj.rever(reverse, str, 0, strlen(str)-1);

请注意,除非有其他理由这样做,否则我不会创建这个类的一部分(如果它反过来返回类中包含的char*的反向),并且因为我们是使用C ++我建议使用std::string而不是char*