【问题标题】:Reversing a string using with a recursive function in C++在 C++ 中使用递归函数反转字符串
【发布时间】:2013-03-20 05:42:54
【问题描述】:

为了探索我对递归的理解,我尝试使用递归函数来反转字符串。这似乎应该比现在对我来说更简单。谁能告诉我我做错了什么。当我执行下面的代码时,它会产生一个空行。我在这里四处寻找类似的主题,但每件事都是用其他语言写的……令我惊讶的是。

#include <iostream>
#include <string>

using namespace std;


/**
    Recursivly reverses a string
    @param return last_char, the last character currently in the string
    @param go, the recursive function to return the character and continue     within the function
    **/
char string_reverse(string word)
{

    if (word.length()-1 > 0)
    {
    char last_char = word[word.length()-1];
    word.erase(word.length()-1);
    char go = string_reverse(word);
    return go;

    }

else 
    return false;

}


int main()
{
cout << "Enter a string: ";
string input;
getline(cin, input);
string last;
last = last + string_reverse(input);
cout << last << endl;

/*char fig = string_reverse(input, fig);
cout << fig << endl;
*/

system("pause");
return 0;
}

【问题讨论】:

    标签: c++ string function recursion


    【解决方案1】:

    找到了一种重写代码的简单方法,无需所有适用于奇数或偶数字符串的函数调用。似乎更有效请注意是否有任何错误,这是我解决的作业问题。希望任何 cmets 来纠正问题

    string R_reverse(string input)
    {
    	if (input.length() == 0)
    		return input;
    	else
    	{
    		string old = input.substr(0,1);
    		string newstr = input.substr(1, (input.length() - 1));
    		return R_reverse(newstr) + old;
    	}
    }

    【讨论】:

      【解决方案2】:

      这是对上述答案之一的小调整,可处理偶数或奇数长度的字符串:

      string reverse (string str)
      {
      
      if (str.length() == 0)
          return "";
      else
          if (str.length() == 1)
              return str.substr(0,1);
          else
          {
              string first_char = str.substr(0,1);
              string last_char = str.substr(str.size()-1,1);
              string middle = str.substr(1, str.size()-2);
              return last_char + reverse(middle) + first_char;
          }
       }
      

      长度为 0 的字符串和长度为 1 的字符串必须分别与递归情况分开处理。

      【讨论】:

        【解决方案3】:

        如果你返回字符串,你能得到的最短版本是这样的:

        std::string string_reverse(const std::string& str)
        {
          return str.size() > 1? string_reverse(str.substr(1)) + str[0] : str;
        }
        

        【讨论】:

          【解决方案4】:

          您需要返回字符串,还需要将提取的字符添加到返回值

          string string_reverse(string word)
          {
              if (word.length() - 1 > 0)
              {
                  char last_char = word[word.length()-1];
                  word.erase(word.length()-1);
                  string go = string_reverse(word);
                  return go.insert(0, 1, last_char);
              }
              else
                  return "";
          }
          

          【讨论】:

          • 改变 char go = string_reverse(word);到一个字符串,除了第一个字母之外,它都颠倒了。谢谢。这就是我一直在寻找的。​​span>
          【解决方案5】:

          你的反向身体根本不起作用。反转思路如下:

          If the string len is 1, return it.
          Otherwise,
             Remove the first character.
             Recursively reverse the remaining string.
             Add the first character above to the reversed string.
             Return the new string.
          

          【讨论】:

            【解决方案6】:

            string_reverse 中,您应该返回last character + string_reverse(word) + first character

            在您的else 中,返回一个空字符串,这样您就不会遇到输入错误。

            调用函数时,不要对word做任何其他事情,直接调用string_reverse(word)即可

            把它们放在一起:

            #include <iostream>
            #include <string>
            
            using namespace std;
            
            
            /**
                Recursivly reverses a string
                @param return last_char, the last character currently in the string
                @param go, the recursive function to return the character and continue
                within the function
                **/
            string string_reverse(string word)
            {
            
                if (word.length()-1 > 0)
                {
                string first_char = word.substr(0,1);
                string last_char = word.substr(word.size()-1,1);
                string middle = word.substr(1, word.size()-2);
                return last_char + string_reverse(middle) + first_char;
            
                }
            
            else 
                return "";
            
            }
            
            
            int main()
            {
            cout << "Enter a string: ";
            string input;
            getline(cin, input);
            cout << string_reverse(input); << endl;
            
            system("pause");
            return 0;
            }
            

            但是,对于奇数字母计数,这将失败。 “c”将输出“cc”。我将把它留给你。

            【讨论】:

            • 有一些错误,但感谢您的洞察力。我会搞砸的。
            • 是的,对不起。我实际上并没有运行它。
            【解决方案7】:

            string_reverse() 返回char。您不可能使用单个 char 返回字符串的反转。

            最重要的是,string_reverse() 中的逻辑是一个 long 方法,它可以做任何接近反转字符串的操作。

            【讨论】:

            • 你不能把每个字符放在一起然后转换成一个字符串吗?
            猜你喜欢
            • 2022-01-09
            • 2013-02-25
            • 2020-06-28
            • 1970-01-01
            • 2011-03-26
            • 2016-01-25
            • 2015-09-27
            • 1970-01-01
            相关资源
            最近更新 更多