当前位置:  开发笔记 > 编程语言 > 正文

通过递归以相反的顺序打印出一行代码

如何解决《通过递归以相反的顺序打印出一行代码》经验,为你挑选了1个好方法。

我正在尝试不使用任何存储容器.我不知道是否有可能.这是我到目前为止所拥有的.(我遇到了分段错误).

#include 
#include 

using namespace std;

void foo(string s)
{
    size_t pos;
    pos = s.find(' ');
    if(pos == string::npos)
        return;
    foo(s.erase(0, pos));
    cout << s.substr(0, pos) << " ";
}

int main()
{
    foo("hello world");
    return 0;
}

我知道这段代码可能有很多问题.撕掉了.我渴望学习.我正在尝试模仿订单打印,就像在单个链接列表的反向打印中一样.谢谢.

编辑:一个例子:"你是惊人的"成为"你是惊人的"



1> DevSolar..:

段错误是堆栈溢出.

foo( "hello world" )将所有内容删除到第一个空格(" world")并递归.

foo( " world" )将所有内容删除到第一个空格(" world")并递归.

foo( " world" )......你明白了.

此外,一旦你调用foo( s.erase( 0, pos ) ),s.substr( 0, pos )在递归返回后尝试打印没有意义.你需要在删除它之前将子字符串保存在某个地方,这样你以后仍然可以打印它.

void foo(string s)
{
    size_t pos = s.find(' ');            // declare-and-use in one line
    string out = s.substr( 0, pos );     // saving the substring
    if ( pos != string::npos )
    {
        foo( s.erase( 0, pos + 1 ) );    // recurse, skipping the space...
        cout << " ";                     // ...but *print* the space
    }
    cout << out;                         // print the saved substring
}

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有