使用递归而不使用<algorithm>或循环来反转字符串

时间:2017-02-28 22:37:35

标签: c++

我正在尝试创建一个完全反转字符串的函数,而不使用reverse()函数或循环(即“hello”变成“olleh”)但我得到了一个分段错误,我在下面编写了以下代码:

void reverseString(string &s) {
    int strIndex = 0;
    int strSize = (s.size() - 1);

    if (s.size() <= 1) { 
        return;
    }

    else {
        if (strIndex < (s.size() / 2)) {
            int temp = s.at(strIndex);
            s.at(strIndex) = s.at(strSize);
            s.at(strSize) = temp;

            strIndex = strIndex + 1;
            strSize = strSize - 1;

            reverseString(s);
        }
    }
}

注意:我不允许更改该功能的参数。

2 个答案:

答案 0 :(得分:0)

你只是在相同的字符串上递归调用reverseString,这只会导致同一个进程无限重复并导致stackoverflow

答案 1 :(得分:0)

这一行:

strIndex = strIndex + 1;

永远不会产生影响,因为本地变量不会被“重用”以用于下一次调用函数。每个函数调用都会创建一组新的局部变量。

由于您无法更改功能签名,因此您必须更改字符串。也许是这样的:

void reverseString(string &s) {
    if(s.size() <= 1)
        return;
    char c = s[0];
    s = s.substr(1, s.size() - 1);
    reverseString(s);
    s += c;
}