diff --git a/lesson_5/exercise_1.hpp b/lesson_5/exercise_1.hpp new file mode 100644 index 0000000..93aaa7f --- /dev/null +++ b/lesson_5/exercise_1.hpp @@ -0,0 +1,38 @@ +/* + * exercise_1.hpp + * + * Created on: 6 окт. 2021 г. + * Author: alexander + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +template +void printWords(IT it, IT end) +{ + std::unordered_set countWords(it, end); + std::copy(countWords.begin(), countWords.end(), std::ostream_iterator(std::cout, "; ")); +} + +void exercise_1() +{ + std::vector v { "Один", "Два", "Три", "Пять", "Один", "Пять", "Шесть", "Два", "Два", "Один", "Семь", "Девять" }; + std::cout << "Вывод вектора:" << std::endl; + printWords(v.begin(), v.end()); + + std::list l(v.begin(), v.end()); + std::cout << "\nВывод листа:" << std::endl; + printWords(l.begin(), l.end()); + + std::deque d(v.begin(), v.end()); + std::cout << "\nВывод деки:" << std::endl; + printWords(d.begin(), d.end()); +} diff --git a/lesson_5/exercise_2.hpp b/lesson_5/exercise_2.hpp new file mode 100644 index 0000000..c6385ce --- /dev/null +++ b/lesson_5/exercise_2.hpp @@ -0,0 +1,69 @@ +/* + * exercise_2.hpp + * + * Created on: 7 окт. 2021 г. + * Author: alexander + */ + +#pragma once + +#include +#include +#include +#include +#include + +std::string getSentence(std::string &s) +{ + std::string punctuationMarks { ".?!" }; // разделительные знаки пунктуации + std::string temp; // найденное предложение из введенных данных + + for (const char &c : s) // посимвольно перебираем поток данных + { + temp.push_back(c); // добавляем каждый символ в потенциальное найденное предложение + + if (punctuationMarks.find(c) != std::string::npos) // если найден разделительный знак пунктуации - заканчиваем поиск + { + s.erase(0, temp.size()); // удаляем найденное предложение из потока данных + if (temp[0] == ' ') { temp.erase(0, 1); } // обрезаем пробел в начале предложения, если он есть + return temp; // возвращаем найденное предложение + } + } + + return {}; // иначе возвращаем пустой объект +} + +void exercise_2() +{ + std::unordered_set> sentences; + std::string currentString, tempString; // текущая считанная строка и новый формируемый поток данных + + while (std::getline(std::cin, currentString)) + { + if (!currentString.empty()) // пропускаем пустую строку, если она есть + { + tempString += currentString + ' '; // суммируем в новом потоке все введённые предложения, если предыдущее не закончено + // добавляем разделитель, если предложение было перенесено на новую строку + while (true) + { + std::string sentence(std::move(getSentence(tempString))); // ищем предложение из сформированного потока данных + if (sentence.empty()) + { + break; // прекращаем поиск, если нет ни одного найденного предложения + } + sentences.insert(std::move(sentence)); // иначе сохраняем найденное предложение и продолжаем поиск другого + } + } + } + + std::priority_queue> q; + for (const auto &sentence : sentences) + { + q.push({ sentence.size(), sentence }); + } + while (!q.empty()) + { + std::cout << q.top().first << ": " << q.top().second << '\n'; + q.pop(); + } +} diff --git a/lesson_5/main.cpp b/lesson_5/main.cpp new file mode 100644 index 0000000..5bfc332 --- /dev/null +++ b/lesson_5/main.cpp @@ -0,0 +1,17 @@ +/* + * main.cpp + * + * Created on: 4 окт. 2021 г. + * Author: alexander + */ + +#include "exercise_1.hpp" +#include "exercise_2.hpp" + +int main() +{ + exercise_1(); + exercise_2(); + + return 0; +}