1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <string>
#include <iostream>
#include <regex>
#include <iterator>
using namespace std;
bool modify(string const &match)
{
cout << "Capitalize and *-embed " << match << " [yn]? ";
string request;
getline(cin, request);
return request == "y";
}
size_t replace(string &target, string::iterator begin, string match)
{
for (auto &el: match)
el = toupper(el);
size_t len = match.length();
match = '*' + match + '*';
target.replace(begin, begin + len, match);
return len + 2;
}
int main()
{
string target("... oh, when the Saints, ...");
regex re("\\w+");
smatch match;
size_t offset = 0;
while (true)
{
auto begin = target.begin() + offset;
if (not regex_search(string::const_iterator(begin),
target.cend(), match, re))
break;
size_t pos = match.position(0);
offset += pos +
(modify(match[0]) ?
replace(target, begin + pos, match[0])
:
match.length(0));
}
cout << "new text: " << target << '\n';
}
//=
|