我想在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;
}
您能帮我解决这个问题吗?
您可以通过递归返回字符串的反向后半部分+反向的前半部分来反向字符串。当字符串短于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
如何使用以原始字符串开头和为空的反向字符串开头的函数。如果原件和反面的长度相同,我们就完成了。