fork(2) download
  1. #include <string>
  2. #include <set>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <iostream>
  6.  
  7.  
  8. using std::set;
  9. using std::string;
  10. using std::begin;
  11. using std::end;
  12. using std::vector;
  13. using std::cout;
  14.  
  15.  
  16.  
  17. vector<string> split(const string& s, const char d)
  18. {
  19. vector<string> split_str;
  20. string buffer;
  21.  
  22. for_each(begin(s), end(s), [d, &split_str, &buffer](const char ch){
  23. if (ch == d)
  24. {
  25. split_str.push_back(buffer);
  26. buffer = "";
  27. }
  28. else
  29. {
  30. buffer += ch;
  31. }
  32. });
  33.  
  34. return split_str;
  35. }
  36.  
  37.  
  38.  
  39. set<string> getUnique (const vector<string> v)
  40. {
  41. set<string> unique;
  42. for_each(begin(v), end(v), [&unique](const string word){
  43. unique.insert(word);
  44. });
  45.  
  46. return unique;
  47. }
  48.  
  49.  
  50.  
  51. string joinSet(const set<string> s, const char d)
  52. {
  53. string join_str {""};
  54. for (set<string>::iterator it = s.begin(); it != s.end(); it++){
  55. join_str += *it + d;
  56. };
  57.  
  58. // erase last delimiter
  59. join_str.erase(join_str.size(), 1);
  60.  
  61. return join_str;
  62. }
  63.  
  64.  
  65.  
  66. std::string removeDuplicateWords(const std::string& str)
  67. {
  68. return joinSet(getUnique(split(str, ' ')), ' ');
  69. }
  70.  
  71.  
  72. int main()
  73. {
  74. cout << removeDuplicateWords("alpha beta beta gamma gamma gamma delta alpha beta beta gamma gamma gamma delta");
  75. // should return alpha beta gamma delta
  76. }
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout
alpha beta delta gamma