[英]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.