簡體   English   中英

通過C ++中的遞歸進行字符串反轉

[英]string reversal via recursion in c++

我在網上尋找一些解決方案后嘗試了我的代碼。 有一種關於通過遞歸進行字符串反轉的算法,我盡力根據該算法來編寫代碼。 不幸的是,我的代碼僅交換給定字符串中的第一個和最后一個字符,而不交換第二個字符與第二個倒數,依此類推。 任何幫助將不勝感激,這是我的代碼:

string reverse(string s,int length,int start=0){

    if (start>=length){
        return s;
    }
    else{
        char temp=s[length];
        s[length]=s[start];
        s[start]=temp;
        reverse(s,--length,++start);
    }return s;
}

int main(void) {

    string a;cout<<"enter a string:";getline(cin,a);
    cout<<reverse(a,a.length()-1,0);
}

您無需返回s (它是原始字符串的副本,其中第一個和最后一個字符已切換),而不是返回下一個對reverse()調用:

else{
    //...
    return reverse( s, --length, ++start );
}

您需要通過引用傳遞字符串,而不是通過reverse函數傳遞值:

string reverse(string& s,int length,int start=0){

實時示例: http//ideone.com/pJ3G9l

引用起作用的原因是您要反轉當前字符串,而不是臨時字符串。

正如評論所建議的那樣,如果所需的效果是不更改原始字符串,則執行遞歸的輔助函數將起作用。

string reverse_helper(string& s,int length,int start)
{
    if (start>=length)
        return s;
    else
    {
        char temp=s[length];
        s[length]=s[start];
        s[start]=temp;
        reverse_helper(s,--length,++start);
    }
    return s;
}

string reverse(string str, int length, int start=0)
{
    return reverse_helper(str, length, start);
}

輔助功能的實時示例: http : //ideone.com/RzY1Bu

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM