Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <map>
- #include <string>
- #include <set>
- #include <algorithm>
- std::map<std::string, std::string> parseString(const std::string& string) {
- std::map<std::string, std::string> pairedWordsFromString;
- size_t currentPosition = 0, prevPosition = 0;
- currentPosition = string.find(' ', prevPosition);
- std::string englishWord(string, prevPosition, currentPosition - prevPosition);
- currentPosition += 3;
- prevPosition = currentPosition;
- while (currentPosition < string.size()) {
- currentPosition = string.find(',', prevPosition);
- if (currentPosition == std::string::npos) {
- currentPosition = string.size();
- }
- std::string latinWord(string, prevPosition, currentPosition - prevPosition);
- pairedWordsFromString[latinWord] = englishWord;
- currentPosition += 2;
- prevPosition = currentPosition;
- }
- return pairedWordsFromString;
- }
- class LatinEnglishDict {
- std::map<std::string, std::set<std::string>> latinEnglishDict_;
- void AddWord(const std::pair<std::string, std::string>& wordsPair) {
- latinEnglishDict_[wordsPair.first].insert(wordsPair.second);
- }
- void AddMapOfWords(const std::map<std::string, std::string>& wordsMap) {
- for (const auto& wordsPair : wordsMap) {
- this->AddWord(wordsPair);
- }
- }
- public:
- void FillDict() {
- std::string string;
- while (getline(std::cin, string)) {
- this->AddMapOfWords(parseString(string));
- }
- }
- void PrintDict() {
- std::cout << latinEnglishDict_.size() << '\n';
- for (const auto& latinWord : latinEnglishDict_) {
- std::cout << latinWord.first << " - ";
- for (auto englishWord = latinWord.second.begin(); englishWord != latinWord.second.end(); ++englishWord) {
- if (englishWord != --latinWord.second.end()) {
- std::cout << *englishWord << ", ";
- } else {
- std::cout << *englishWord << '\n';
- }
- }
- }
- }
- };
- int main() {
- LatinEnglishDict dictionary;
- dictionary.FillDict();
- dictionary.PrintDict();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement