当前位置:   iOS > 正文

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

c++,容器,ios,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

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

#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
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/iOS/detail/7956
推荐阅读
相关标签
  

闽ICP备14008679号