我正在尝试创建一个完全反转字符串的函数,而不使用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);
}
}
}
注意:我不允许更改该功能的参数。
答案 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;
}