Тестовое задание на должность программист Junior/Middle C++/DirectX
Задание Junior C++: Техническое задание на должность Junior C++ developer.docx Решение: source.rar Задание: Middle C++/DirectX: Техническое задание на должность Middle С++ Developer.doc Решение: не выполнялось |
Всего комментариев 8
Комментарии
-
круто попробую сделать может потяну на джуна !!! (хотя наверное нет )
вот сделал
Кликните здесь для просмотра всего текстаC++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
#include <iostream> #include <fstream> #include <map> #include <regex> class Parser { private: std::map<std::string, int32_t> m_OutList; std::fstream inputFile; public: enum AddSuccess { pluss = -1, error, newElem }; AddSuccess AddTry(std::string& key) { static AddSuccess returnValue; returnValue = error; try { ++m_OutList[key]; returnValue = pluss; } catch (...) { m_OutList.insert(std::pair<std::string, int32_t>(key, 0)); returnValue = newElem; } return returnValue; } void replacePuncts(std::string& tmp) { static std::regex regPuncts("[[:punct:]]"); tmp = std::regex_replace(tmp, regPuncts, ""); } bool openFile(std::string& filePath) { inputFile.open(filePath); if (!inputFile.is_open()) { std::cerr << "File opening error!!!"; return false; } return true; } void closeFile(void) { inputFile.close(); } bool parseInfo(void) { std::string tmp; while (!inputFile.eof()) { inputFile >> tmp; replacePuncts(tmp); if (AddTry(tmp) == error) return false; } return true; } bool saveResult(std::string& name) { std::ofstream out(name, std::fstream::out); if (!inputFile.is_open()) { std::cerr << "File creation or opening error!!!"; return false; } for (auto it = m_OutList.begin(); it != m_OutList.end(); ++it) out << it->first << " " << it->second << std::endl; out.close(); return true; } }; int main(int argc, char* argv[]) { setlocale(LC_ALL, "Russian"); std::ios::sync_with_stdio(false); Parser handler; if (!handler.openFile( static_cast<std::string>("input.txt"))) { return -1; } if (!handler.parseInfo()) { handler.closeFile(); return -1; } handler.closeFile(); if (!handler.saveResult( static_cast<std::string>("output.txt"))) { return -1; } return NULL; }
на ваше взглянул после своего решения, порадовало что я тоже решил воспользоватся map
P.S у нас с вами кстати довольно похожее решение, отличается только сам парсерЗапись от obivan размещена 05.08.2016 в 11:17
Обновил(-а) obivan 05.08.2016 в 13:08 -
Запись от KOPOJI размещена 05.08.2016 в 14:04 -
Запись от Avazart размещена 05.08.2016 в 16:38
Обновил(-а) Avazart 05.08.2016 в 16:41 -
Avazart, ну я подразумевал, мы пробуем добавить элемент по ключу, если такого ключа нет, то оператор [] кидает исключение, в таком случае мы его отлавливаем и добавляем новые элемент с таким ключом и значением 0, а если элемент был то увеличиваем его на 1, returnValue для анализа был ли добавлен новые элемент, был ли увеличен или вообще если прошел error то плохо все, ну согласен может глуповато сделал но решил так.
хотя перечитал как мап работает, все таки хрень написал там надо было через find проверить существование ключа, ну что уж поделать вот такие костылиЗапись от obivan размещена 06.08.2016 в 02:48
Обновил(-а) obivan 06.08.2016 в 03:05 -
Запись от Fulcrum_013 размещена 06.08.2016 в 06:50 -
Цитата:то оператор [] кидает исключение,
И я уже не говорю о зле вида catch(...).
Для определения есть или элемент используйте метод find.
Кстати,между прочем insert тоже возвращает результат.Запись от Avazart размещена 18.08.2016 в 14:34
Обновил(-а) Avazart 18.08.2016 в 15:10 -
Цитата:Ну так в том то и дело что он не кидает исключение, а просто добавляет ключ (если такового не было ранее, теперь будет).
И я уже не говорю о зле вида catch(...).
Для определения есть или элемент используйте метод find.
Кстати,между прочем insert тоже возвращает результат.
написал потому что не знал какой тип исключения кидает(ну его и нет собственно ), вообщем наговнокодил признаю )Запись от obivan размещена 18.08.2016 в 15:53 -
Запись от Avazart размещена 20.08.2016 в 17:23