递归 C++ 函数将特定字符移动到字符串末尾

问题描述 投票:0回答:3

我正在尝试编写一个递归函数,给定一个字符串,递归地计算一个新字符串,其中所有小写“x”字符都已移动到字符串的末尾。

例如,
moveXs("xxre") --> "rexx"
moveXs("xxhixx") --> "hixxxx"
moveXs("xhixhix") --> "hihixxx"

我对C++相对较新,尤其是递归(不幸的是该函数必须使用这种方法来解决问题),所以我在这个问题上遇到了麻烦。下面是我迄今为止编写的代码,但它似乎只返回空字符串,我一生都无法弄清楚为什么。

string moveXs(const string& str)
{
    string strCopy = str;
    if (strCopy.length() <= 1)
    {
        return str;
    }
    else if (strCopy[0] == 'x')
    {
        strCopy = strCopy.substr(1, strCopy.length() - 1) + str[0];
        return moveXs(strCopy.substr(0, (strCopy.length() - 2)));
    }
    else
    {
        return strCopy.substr(0, 1) + moveXs(strCopy.substr(1, strCopy.length() - 1));
    }
}

任何帮助或建议将不胜感激!

c++ string recursion
3个回答
2
投票

看起来您刚刚遇到了一些索引问题。我在这里修改了您的代码,并记下新的返回值。我还去掉了无关的第二根弦。

string moveXs(const string& str)
{
    if (str.length() <= 1)
    {
        return str;
    }
    else if (str[0] == 'x')
    {
        return moveXs(str.substr(1, (str.length() - 1))) + str[0];
    }
    else
    {
        return str[0] + moveXs(str.substr(1, str.length()));
    }
}

您可以在这里看到它的实际效果:http://ideone.com/aT75l5


0
投票

一种简单的方法可以是从头到尾遍历字符串,计数并删除“x”。然后在前一个字符串中追加“x”计数次数。


0
投票
string MoveX(string str,int n){
  if(n==0 || n==1){
    return str;
  }
  if(str[n-1]=='x'){
    str[n-1]=str[n-1]-'x';
    str=str+"x";
  }
    string atr=MoveX(str,n-1);
    return atr;

}
© www.soinside.com 2019 - 2024. All rights reserved.