【问题标题】:Recursive string swap递归字符串交换
【发布时间】:2016-04-15 21:53:07
【问题描述】:

我正在尝试以递归方式交换字符串的两个索引,但我遇到了分段错误。谁能告诉我我哪里出错了?这一切都在一个 void 函数中,它接受三个参数,单词(字符串)和 first 和 last 作为要交换的位置

int count = 0;
if(words.length() == 0)
    return;


if(words.length() < last)
    return;
if(words[first] > words[last])
    return;

if(words.at(first + 1)){
    words[first] = words[last + count];
    reverseit(words, first, last);
}
if(words.length() >= last){
    words[last - 1] = words[last];
    words[last] = words[last -1];
//  words[first + 1] = words[first];
//  words[first] = words[first +1];
    count++;
    reverseit(words, first, last);
}

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布代码并准确描述问题之前,我们无法有效地帮助您。在这种情况下,我们应该得到一个驱动程序和完整的错误消息。 “出现段错误”不符合标准。

标签: c++ string recursion


【解决方案1】:

我无法从您的描述或代码中弄清楚您的函数应该做什么。这是我的最佳猜测——如果有误,请相应地更新您的问题:

#include <string>
#include <iostream>

void reverseit(std::string &words, size_t first, size_t last) {

    size_t length = words.length();

    if (length == 0 || last > length || first >= last) {
        return;
    }

    char temp = words[last];
    words[last] = words[first];
    words[first] = temp;

    reverseit(words, first + 1, last - 1);
}

int main(int argc, char *argv[]) {

    std::string str = "abcdefghijklmnopqrstuvwxyz";

    reverseit(str, 6, 18);

    std::cout << str << std::endl;

    return 0;
}

生产:

> ./a.out
abcdefsrqponmlkjihgtuvwxyz
> 

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 2011-09-27
    • 2011-05-09
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2017-10-28
    • 2013-08-21
    相关资源
    最近更新 更多