Arrays 使用字符的递归进行字符串反转*
我希望使用递归在适当的位置反转字符串。虽然这可能是重复的问题,但我不理解下面代码中的错误,我在这里提问之前搜索了答案Arrays 使用字符的递归进行字符串反转*,arrays,pointers,recursion,char,reverse,Arrays,Pointers,Recursion,Char,Reverse,我希望使用递归在适当的位置反转字符串。虽然这可能是重复的问题,但我不理解下面代码中的错误,我在这里提问之前搜索了答案 #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) ret
#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;
}
这段代码有很多问题。您需要决定的第一件事是将输入字符串反转到位,还是返回指向新分配字符串的指针。因为看起来您计划填充第二个阵列,所以让我们继续:
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 < /Cl> >代替“代码> char */COD>”。它是否正确地反转字符串??或者,其他错误是:“Reversion::~Reversion()”,引用自:_mainin reversion.o ld:symbol未找到体系结构x86_64 clang:Error:linker命令失败,退出代码为1(使用-v查看调用)make:**[String\u rever\u recurr]错误1我正在mac机器上使用eclipse这工作正常,但错误是:我没有定义构造函数和析构函数。我在.h文件中声明了,但忘了定义。我做到了,而且成功了。感谢您的整改:)
obj.rever(reverse, str, 0, strlen(str)-1);