如何使用递归char *函数来反转C ++中的字符串

时间:2015-10-26 09:19:05

标签: c++ recursion

只是为了完全披露,这是一项家庭作业。

我需要使用只接受" 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;

我并没有明确要求直接的解决方案,但是我无法使用指针作为输入和诸如此类的方法来解决这个问题。任何有正确方向的提示或推动都值得赞赏

5 个答案:

答案 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)

如果它是递归函数,它应该处理这样的输入:

  1. F(&#34; yourstring&#34;)
  2. F(&#34; ourstring&#34;)
  3. F(&#34; urstring&#34;)
  4. 每次都会提示处理一个字符。伪代码应该

    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;
}