#include <iostream>
#include <string>
#include <regex>
#include <iterator>
std::string fix_string(const std::string& str) {
static const std::regex rgx_pattern("\\s+(?=[\\.,])");
std::string rtn;
rtn.reserve(str.size());
std::regex_replace(std::back_insert_iterator<std::string>(rtn),
str.cbegin(),
str.cend(),
rgx_pattern,
"");
return rtn;
}
int main(int argc, char *argv[]) {
std::string str = "This , is a string . And another .";
std::string new_str = fix_string(str);
std::cout << "Old String: " << str << "\n";
std::cout << "Fixed String: " << new_str << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDxpdGVyYXRvcj4KCnN0ZDo6c3RyaW5nIGZpeF9zdHJpbmcoY29uc3Qgc3RkOjpzdHJpbmcmIHN0cikgewogIHN0YXRpYyBjb25zdCBzdGQ6OnJlZ2V4IHJneF9wYXR0ZXJuKCJcXHMrKD89W1xcLixdKSIpOwogIHN0ZDo6c3RyaW5nIHJ0bjsKICBydG4ucmVzZXJ2ZShzdHIuc2l6ZSgpKTsKICBzdGQ6OnJlZ2V4X3JlcGxhY2Uoc3RkOjpiYWNrX2luc2VydF9pdGVyYXRvcjxzdGQ6OnN0cmluZz4ocnRuKSwKICAgICAgICAgICAgICAgICAgICAgc3RyLmNiZWdpbigpLAogICAgICAgICAgICAgICAgICAgICBzdHIuY2VuZCgpLAogICAgICAgICAgICAgICAgICAgICByZ3hfcGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgIiIpOwogIHJldHVybiBydG47Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICBzdGQ6OnN0cmluZyBzdHIgPSAiVGhpcyAgLCBpcyBhIHN0cmluZyAgIC4gQW5kIGFub3RoZXIgLiI7CiAgc3RkOjpzdHJpbmcgbmV3X3N0ciA9IGZpeF9zdHJpbmcoc3RyKTsKICAKICBzdGQ6OmNvdXQgPDwgIk9sZCBTdHJpbmc6ICIgPDwgc3RyIDw8ICJcbiI7CiAgc3RkOjpjb3V0IDw8ICJGaXhlZCBTdHJpbmc6ICIgPDwgbmV3X3N0ciA8PCBzdGQ6OmVuZGw7CiAgCiAgcmV0dXJuIDA7Cn0K