#include <iostream>
#include <string>
const int maxListSize = 50;
template<class T>
class List
{
private:
int numberOfElements;
int currentPosition;
T data[maxListSize];
public:
List()
{
numberOfElements = 0;
currentPosition = -1;
}
void insert(T element)
{
if (numberOfElements >= maxListSize)
{
return;
}
data[numberOfElements] = element;
numberOfElements++;
}
bool first(T &element)
{
if (numberOfElements == 0)
{
return false;
}
else
{
currentPosition = 0;
element = data[currentPosition];
return true;
}
}
bool next(T &element)
{
if (currentPosition < 0)
{
return false;
}
if (currentPosition >= numberOfElements - 1)
{
return false;
}
currentPosition++;
element = data[currentPosition];
return true;
}
};
using WordPair = std::pair<std::string, int>;
using WordList = List<WordPair*>;
void incrementCount(WordList &wl, const std::string& s)
{
WordPair* item = nullptr;
if (wl.first(item))
{
if (item->first == s)
{
++(item->second);
return;
}
while (wl.next(item))
{
if (item->first == s)
{
++(item->second);
return;
}
}
}
wl.insert(new WordPair { s, 1 });
}
void printList(WordList &wl)
{
WordPair *item = nullptr;
if (wl.first(item))
{
std::cout << item->first << " : " << item->second << "\n";
while (wl.next(item))
{
std::cout << item->first << " : " << item->second << "\n";
}
}
}
int main()
{
std::string words[10] = { "one", "two", "three", "four", "one",
"two", "three", "two", "three", "three" };
WordList wl;
for (int i = 0; i < 10; ++i)
{
incrementCount(wl, words[i]);
}
printList(wl);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY29uc3QgaW50IG1heExpc3RTaXplID0gNTA7Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBMaXN0CnsKcHJpdmF0ZToKICAgIGludCBudW1iZXJPZkVsZW1lbnRzOwogICAgaW50IGN1cnJlbnRQb3NpdGlvbjsKICAgIFQgZGF0YVttYXhMaXN0U2l6ZV07CnB1YmxpYzoKICAgIExpc3QoKQogICAgewogICAgICAgIG51bWJlck9mRWxlbWVudHMgPSAwOwogICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IC0xOwogICAgfQogICAgdm9pZCBpbnNlcnQoVCBlbGVtZW50KQogICAgewogICAgICAgIGlmIChudW1iZXJPZkVsZW1lbnRzID49IG1heExpc3RTaXplKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBkYXRhW251bWJlck9mRWxlbWVudHNdID0gZWxlbWVudDsKICAgICAgICBudW1iZXJPZkVsZW1lbnRzKys7CiAgICB9CgogICAgYm9vbCBmaXJzdChUICZlbGVtZW50KQogICAgewogICAgICAgIGlmIChudW1iZXJPZkVsZW1lbnRzID09IDApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IDA7CiAgICAgICAgICAgIGVsZW1lbnQgPSBkYXRhW2N1cnJlbnRQb3NpdGlvbl07CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBib29sIG5leHQoVCAmZWxlbWVudCkKICAgIHsKICAgICAgICBpZiAoY3VycmVudFBvc2l0aW9uIDwgMCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA+PSBudW1iZXJPZkVsZW1lbnRzIC0gMSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgY3VycmVudFBvc2l0aW9uKys7CiAgICAgICAgZWxlbWVudCA9IGRhdGFbY3VycmVudFBvc2l0aW9uXTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfTsKCnVzaW5nIFdvcmRQYWlyID0gc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLCBpbnQ+Owp1c2luZyBXb3JkTGlzdCA9IExpc3Q8V29yZFBhaXIqPjsKCnZvaWQgaW5jcmVtZW50Q291bnQoV29yZExpc3QgJndsLCBjb25zdCBzdGQ6OnN0cmluZyYgcykKewogICAgV29yZFBhaXIqIGl0ZW0gPSBudWxscHRyOwogICAgaWYgKHdsLmZpcnN0KGl0ZW0pKQogICAgewogICAgICAgIGlmIChpdGVtLT5maXJzdCA9PSBzKQogICAgICAgIHsKICAgICAgICAgICAgKysoaXRlbS0+c2Vjb25kKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB3aGlsZSAod2wubmV4dChpdGVtKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChpdGVtLT5maXJzdCA9PSBzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICArKyhpdGVtLT5zZWNvbmQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgd2wuaW5zZXJ0KG5ldyBXb3JkUGFpciB7IHMsIDEgfSk7Cn0KCnZvaWQgcHJpbnRMaXN0KFdvcmRMaXN0ICZ3bCkKewogICAgV29yZFBhaXIgKml0ZW0gPSBudWxscHRyOwogICAgaWYgKHdsLmZpcnN0KGl0ZW0pKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBpdGVtLT5maXJzdCA8PCAiIDogIiA8PCBpdGVtLT5zZWNvbmQgPDwgIlxuIjsKICAgICAgICB3aGlsZSAod2wubmV4dChpdGVtKSkKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBpdGVtLT5maXJzdCA8PCAiIDogIiA8PCBpdGVtLT5zZWNvbmQgPDwgIlxuIjsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmcgd29yZHNbMTBdID0geyAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgIm9uZSIsCiAgICAJInR3byIsICJ0aHJlZSIsICJ0d28iLCAidGhyZWUiLCAidGhyZWUiIH07CiAgICBXb3JkTGlzdCB3bDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKICAgIHsKICAgICAgICBpbmNyZW1lbnRDb3VudCh3bCwgd29yZHNbaV0pOwogICAgfQogICAgcHJpbnRMaXN0KHdsKTsKfQ==