9.43
#include <iostream>
#include <string>
using namespace std;
void str_rep(string &s, const string oldVal, string newVal)
{
auto len = oldVal.size();
if (s.size() < len)
return;
auto iter = s.begin();
while ((s.end() - iter) >= len) {
auto iter_old = oldVal.begin();
auto temp = iter;
for (; iter_old != oldVal.end(); iter_old++, temp++) {
if (*temp != *iter_old)
break;
}
// if equal, erase & replace
if (iter_old == oldVal.end()) {
iter = s.erase(iter, temp);
auto iter_new = newVal.begin();
while (iter_new != newVal.end()) {
iter = s.insert(iter, *iter_new++);
++iter;
}
}
iter++;
}
}
int main()
{
string s = "ththo thru tho8h";
cout << s << endl;
str_rep(s, "tho", "though");
cout << s << endl;
str_rep(s, "thru", "through");
cout << s << endl;
return 0;
}
9.44
#include <iostream>
#include <string>
using namespace std;
void str_rep(string &s, const string oldVal, const string newVal)
{
auto len = oldVal.size();
if (s.size() < len)
return;
unsigned int index_s = 0, index_o = 0, index_n = 0, temp = 0;
while (s.size() + 1 - index_s >= len) {
index_o = 0;
temp = index_s;
for (; index_o < len; index_o++, temp++) {
if (oldVal[index_o] != s[temp])
break;
}
if (index_o == len) {
s.replace(index_s, len, newVal);
index_s += newVal.size();
} else {
index_s++;
}
}
}
int main()
{
string s = "tho thru tho8h";
cout << s << endl;
str_rep(s, "tho", "though");
cout << s << endl;
str_rep(s, "thru", "through");
cout << s << endl;
return 0;
}
9.45
#include <iostream>
#include <string>
using namespace std;
void add(string &s, const string head, const string tail)
{
s.insert(0, 1, ' ');
s.insert(0, head);
s.append(" ");
s.append(tail);
}
int main()
{
string name = "Peter";
add(name, "Mr.", "Jr");
cout << name << endl;
return 0;
}
9.46
#include <iostream>
#include <string>
using namespace std;
void add(string &s, const string head, const string tail)
{
s.insert(0, 1, ' ');
s.insert(0, head);
s.insert(s.size(), " ");
s.insert(s.size(), tail);
}
int main()
{
string name = "Peter";
add(name, "Mr.", "Jr");
cout << name << endl;
return 0;
}