#include <string>
#include <algorithm>
#include <iterator>
#include <sstream>
#include <vector>
#include <iostream>
using namespace std;
struct endl_whitespace : std::ctype<char> {
static const mask* make_table()
{
static std::vector<mask> v(table_size, mask()); // blank classification table
v['\n'] = space; // endl will be classified as whitespace
return &v[0];
}
endl_whitespace(std::size_t refs = 0) : ctype<char>(make_table(), false, refs) {}
};
string stringCleaner(const string &str)
{
istringstream tempStr(str);
tempStr.imbue(locale(tempStr.getloc(), new endl_whitespace));
ostringstream cleanLine;
unique_copy(istream_iterator<string>(tempStr),
istream_iterator<string>(),
ostream_iterator<string>(cleanLine, "\n"));
return cleanLine.str();
}
int main()
{
std::cout << stringCleaner("http://www aaa com\nhttp://www bbb com\n"
"http://www bbb com\nhttp://www ccc com\n"
"http://www ddd com\nhttp://www ddd com\n"
"http://www ddd com\nhttp://www ddd com\n"
"http://www eee com");
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGVuZGxfd2hpdGVzcGFjZSA6IHN0ZDo6Y3R5cGU8Y2hhcj4gewogICAgc3RhdGljIGNvbnN0IG1hc2sqIG1ha2VfdGFibGUoKQogICAgewogICAgICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxtYXNrPiB2KHRhYmxlX3NpemUsIG1hc2soKSk7IC8vIGJsYW5rIGNsYXNzaWZpY2F0aW9uIHRhYmxlCiAgICAgICAgdlsnXG4nXSA9IHNwYWNlOyAgLy8gZW5kbCB3aWxsIGJlIGNsYXNzaWZpZWQgYXMgd2hpdGVzcGFjZQogICAgICAgIHJldHVybiAmdlswXTsKICAgIH0KICAgIGVuZGxfd2hpdGVzcGFjZShzdGQ6OnNpemVfdCByZWZzID0gMCkgOiBjdHlwZTxjaGFyPihtYWtlX3RhYmxlKCksIGZhbHNlLCByZWZzKSB7fQp9OwpzdHJpbmcgc3RyaW5nQ2xlYW5lcihjb25zdCBzdHJpbmcgJnN0cikKewogICAgaXN0cmluZ3N0cmVhbSB0ZW1wU3RyKHN0cik7CiAgICB0ZW1wU3RyLmltYnVlKGxvY2FsZSh0ZW1wU3RyLmdldGxvYygpLCBuZXcgZW5kbF93aGl0ZXNwYWNlKSk7CiAgICBvc3RyaW5nc3RyZWFtIGNsZWFuTGluZTsKICAgIHVuaXF1ZV9jb3B5KGlzdHJlYW1faXRlcmF0b3I8c3RyaW5nPih0ZW1wU3RyKSwKICAgICAgICAgICAgICAgIGlzdHJlYW1faXRlcmF0b3I8c3RyaW5nPigpLAogICAgICAgICAgICAgICAgb3N0cmVhbV9pdGVyYXRvcjxzdHJpbmc+KGNsZWFuTGluZSwgIlxuIikpOwogICAgcmV0dXJuIGNsZWFuTGluZS5zdHIoKTsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmNvdXQgPDwgc3RyaW5nQ2xlYW5lcigiaHR0cDovL3d3dyBhYWEgY29tXG5odHRwOi8vd3d3IGJiYiBjb21cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3IGJiYiBjb21cbmh0dHA6Ly93d3cgY2NjIGNvbVxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cgZGRkIGNvbVxuaHR0cDovL3d3dyBkZGQgY29tXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dyBkZGQgY29tXG5odHRwOi8vd3d3IGRkZCBjb21cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3IGVlZSBjb20iKTsKfQo=