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

C++ 递归C++;函数将特定字符移动到字符串末尾,c++,string,recursion,C++,String,Recursion,我正在尝试编写一个递归函数,给定一个字符串,递归地计算一个新字符串,其中所有小写“x”字符都已移动到字符串的末尾。 例如, moveXs(“xxre”)-->“rexx” moveXs(“xxhixx”)-->“hixxxx” moveXs(“XHIXIX”)-->“hihixxx” 我对C++是比较新的,尤其是递归(很不幸的是函数必须使用这个方法来解决这个问题),所以我在这个问题上遇到了麻烦。下面是到目前为止我编写的代码,但它似乎只返回空字符串,我一辈子都不知道为什么 string moveX

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

例如,
moveXs(“xxre”)-->“rexx”
moveXs(“xxhixx”)-->“hixxxx”
moveXs(“XHIXIX”)-->“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));
    }
}
stringmovexs(conststring&str)
{
字符串strCopy=str;

if(strCopy.length()一种简单的方法是从开始到结束遍历字符串,计算并删除“x”。然后在前一个字符串中添加“x”计数次数。

看起来您刚刚遇到了一些索引问题。我在这里修改了代码,并注意到了新的返回。我还去掉了无关的第二个字符串

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()));
    }
}
stringmovexs(conststring&str)
{

如果(str.length()将您的编辑与我的编辑进行比较,我就能够准确地看到索引错误的地方。删除strCopy字符串也使编码器变得更干净。非常感谢您的帮助。您应该能够使该尾部也递归,以便对其进行优化。