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

问题描述 投票:1回答:2

我想在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, int(str.size()) - 1, stringToReturn);
    }
    return stringToReturn;
}

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

c++ string reverse
2个回答
1
投票

您可以通过递归返回字符串的反向后半部分+反向的前半部分来反向字符串。当字符串短于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


0
投票

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

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