我想使用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_ */
答案 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*
。