只是为了完全披露,这是一项家庭作业。
我需要使用只接受" char * string"的递归函数来反转char字符串。输入
我已经做了很多谷歌搜索等等,但似乎无法弄明白。如果我可以使用void函数,这可以在几个小时前完成,但唉,这是不允许的。
以下代码不返回任何内容,我们不允许更改函数签名
char *reverseString(char *string)
{
if (*string =='\0') return string;
else
{
return reverseString(string + 1) + *string;
}
}
这是我多次尝试从main调用此函数来获取它的输出,虽然代码运行,但我在控制台中没有输出
char Tstring[] = "TestString";
cout << reverseString(Tstring);
cout << *reverseString(Tstring);
char *answer2 = reverseString(Tstring);
cout << *answer2;
我并没有明确要求直接的解决方案,但是我无法使用指针作为输入和诸如此类的方法来解决这个问题。任何有正确方向的提示或推动都值得赞赏
答案 0 :(得分:2)
您不能使用加号运算符来连接char *指针。
如果你被允许,我宁愿采取一种实际的方法。这里不想说太多,但你可以在不访问字符串之外的任何内存的情况下反转字符串。然后你的递归可以传递指针。
您可能需要辅助功能
decisionHandler(WKNavigationResponsePolicyAllow)
你是从主算法中调用的。
编辑:这将是一个递归解决方案,但递归调用将是辅助函数而不是主函数。不知道你的作业是否允许这样做。可能还有一种方法可以让它在主函数上递归,但这会更复杂。
答案 1 :(得分:0)
您需要记住最后一个字符,然后在没有较短字符的情况下反转字符串。
所以
F("yourstring") = "g" + F("yourstrin")
等等
幸运的是,可以通过小心使用memcpy
来实现答案 2 :(得分:0)
我认为此代码可行。很抱歉写这么一个基本的。我只是在学习C ++。
#include<iostream.h>
#include<string.h>
#include<conio.h>
char *rev(char *s,int n,int i)
{
char t;
if(i<n/2)
{
t=s[i];
s[i]=s[n-i-1];
s[n-i-1]=t;
i++;
rev(s,n,i);
}
return s;
}
void main()
{
char *s;
cout<<"\n\tEnter a String ";
cin>>s;
int n=strlen(s);
rev(s,n,0);
cout<<"\n\tReversed String :"<<s;
getch();
}
答案 3 :(得分:-1)
如果它是递归函数,它应该处理这样的输入:
每次都会提示处理一个字符。伪代码应该
char* F( char* input)
{
move last char to the first;
F(input+1);
return input;
}
工作代码:
char* reverse( char* input )
{
int len = strlen( input );
char tmp = input[ len - 1 ];
if( len > 1 )
{
for( int i = len - 1; i > 0; i-- )
{
input[ i ] = input[ i - 1 ];
}
input[ 0 ] = tmp;
reverse( input + 1 );
}
return input;
}
答案 4 :(得分:-1)
char* reverse(char *str)
{
static int i=0;
static char revstr[100] = "";
if (*str)
{
reverse(str+1);
revstr[i++]=*str;
}
return revstr;
}