【发布时间】:2020-08-27 15:16:21
【问题描述】:
我正在研究一些教科书 C++ 问题,其中之一是编写一个函数,该函数递归 将字符串中某个字母的所有实例替换为另一个字母。我知道对此已有预先存在的功能,但是由于本章重点介绍递归,因此该问题坚持认为解决方案必须是递归的。所以我用 c++ 写了所有这些,这很好,但后来我读了问题的脚注,它说的是:“对于字符串对象的操作,只有方法 at 和 长度(即size)以及运算符+”都是允许的。哇?我只是不明白如果没有 str.substr(pos,len),你怎么能做到这一点,但如果有人能找到方法,我会很高兴。非常感谢那个特别的人哟。
这是我的仓鼠大脑能想到的最好的代码(也是一个小的迭代替代方案,一开始就被注释掉了)。
#include <iostream>
#include <string>
using namespace std;
// iterative solution
/* string replace (string in, char from, char to) {
string res;
for (int i{0}; i < in.length(); i++) {
if (in.at(i) == from)
res += to;
else
res += in.at(i);
}
return res;
} */
// recursive solution
string replace (string in, char from, char to) {
if (in.empty())
return "";
char first{in.at(0)};
if (first == from)
return to + replace (in.substr(1), from, to);
else
return in.at(0) + replace (in.substr(1), from, to);
}
int main () {
string in;
char from, to;
cout << "Word: ";
cin >> in;
cout << "from: ";
cin >> from;
cout << "to: ";
cin >> to;
cout << in << " --> " << replace (in, from, to) << '\n';
return 0;
}
【问题讨论】:
标签: c++ string recursion replace function-definition