在C ++中仅使用std :: string成员来反转没有循环的字符串

我想在C ++中反转字符串而不使用循环或除std :: string之外的任何其他类。仅应使用以下方法来反转字符串: x.at(); s.size()/ s.length(); x.substr(pos,len); 我认为使用递归可以解决此问题,但是我没有弄清楚如何正确地解决问题。

我尝试了这个版本,但是它不起作用。

string reverseWrapper(string str,int i,string stringToReturn) {
if(i < 0) return stringToReturn;
//cout << stringToReturn << '\n' << str.at(i) << '\n';
stringToReturn.push_back(str.at(i));
return reverseWrapper(str,int(str.size()) - 1,stringToReturn);
}

string reverseWithoutLoop(string str) {
    string stringToReturn;
    if(!(stringToReturn.length() == str.length())) {
        return reverseWrapper(str,stringToReturn);
    }
    return stringToReturn;
}

您能帮我解决这个问题吗?

lisa7262 回答:在C ++中仅使用std :: string成员来反转没有循环的字符串

您可以通过递归返回字符串的反向后半部分+反向反向前半部分来反向字符串。当字符串短于2时,您可以停止。

string reverseWithoutLoop(string const& str) {
    if( str.length() < 2 ){
        return str;
    }
    return reverseWithoutLoop( str.substr( str.length()/2,str.length() ) ) 
         + reverseWithoutLoop( str.substr( 0,str.length()/2 ) );
}

查看工作版本here

,

以原始字符串和空的反向字符串开头的函数怎么样。如果原件和反面的长度相同,我们就完成了。

否则,我们将调用函数(并返回结果),并将其与原始字符和当前反向字符以及最后一个字符的串联在一起。我们通过减去两个字符串的长度来计算最后一个字符的索引(并且不要忘记减去1,因为它是从0开始的。)

本文链接:https://www.f2er.com/2996961.html

大家都在问