From a4e6b33366772fb5c7eba715c0cabc04ce3e4c86 Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Thu, 25 Feb 2016 17:43:12 +0300 Subject: [PATCH] anagram: naive version; almost works, lowercase conversion is needed(?) --- cpp/anagram/anagram.cpp | 59 +++++++++++++++++++++++++++++++++++++++++ cpp/anagram/anagram.h | 25 +++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 cpp/anagram/anagram.cpp create mode 100644 cpp/anagram/anagram.h diff --git a/cpp/anagram/anagram.cpp b/cpp/anagram/anagram.cpp new file mode 100644 index 0000000..0458bba --- /dev/null +++ b/cpp/anagram/anagram.cpp @@ -0,0 +1,59 @@ +#include "anagram.h" + +#include +#include +#include + + +namespace anagram { + + +using namespace std; + + +static inline string normalize(const string &str) +{ + string result = str; + + transform(result.begin(), result.end(), + result.begin(), + [](char c){return tolower(c);}); + + sort(result.begin(), result.end()); + + cout << str << " -> " << result << endl; + + return result; +} + +anagram::anagram(const string &_key) +{ + cout << "New test, key=" << _key << endl; + key = normalize(_key); +} + +StringContainer +anagram::matches(const StringContainer &input) const +{ + StringContainer result(input.size()); + + cout << "Input: {"; + for (auto s : input) + cout << s << " "; + cout << "}" << endl; + + auto iter = copy_if(input.cbegin(), input.cend(), + result.begin(), + [=](const string &s){return key == normalize(s);}); + + cout << "Output: {"; + for (auto s : result) + cout << s << " "; + cout << "}" << endl; + + result.resize(distance(result.begin(), iter)); + + return result; +} + +} diff --git a/cpp/anagram/anagram.h b/cpp/anagram/anagram.h new file mode 100644 index 0000000..1cd1d04 --- /dev/null +++ b/cpp/anagram/anagram.h @@ -0,0 +1,25 @@ +#pragma once + +#define EXERCISM_RUN_ALL_TESTS + +#include +#include + + +namespace anagram { + +typedef std::list StringContainer; + + +class anagram +{ + std::string key; + +public: + + anagram(const std::string &_key); + + StringContainer matches(const StringContainer &input) const; +}; + +}