From 1768f21de7b75c98c932fcd734218d348b1b0060 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 27 Feb 2026 17:49:09 +0100 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=82=D1=80=D0=B5=D1=82=D1=8C=D1=8F=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B0=20=D0=BF=D1=8F=D1=82=D0=BE=D0=B9=20=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../5/3_context/main.cpp" | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "\320\227\320\260\320\275\320\270\320\274\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\265 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265/5/3_context/main.cpp" (limited to 'Занимательное программирование/5/3_context/main.cpp') diff --git "a/\320\227\320\260\320\275\320\270\320\274\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\265 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265/5/3_context/main.cpp" "b/\320\227\320\260\320\275\320\270\320\274\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\265 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265/5/3_context/main.cpp" new file mode 100644 index 0000000..d9f40d2 --- /dev/null +++ "b/\320\227\320\260\320\275\320\270\320\274\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\265 \320\277\321\200\320\276\320\263\321\200\320\260\320\274\320\274\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265/5/3_context/main.cpp" @@ -0,0 +1,67 @@ +#include +#include +#include +#include "utf8.h" +#include "context.hpp" +#include "utf8/checked.h" + +static +context_model process_input() +{ + std::array buffer; + std::ptrdiff_t left_over{ 0 }; + context_model context; + + while (!std::cin.eof()) + { + std::cin.read(buffer.data() + left_over, buffer.size() - left_over); + + std::array::iterator octet_iterator = std::begin(buffer); + std::array::iterator start_iterator = octet_iterator; + std::array::iterator end_iterator = octet_iterator + std::cin.gcount() + left_over; + + try + { + while (start_iterator != end_iterator) + { + utf8::utfchar32_t character = utf8::next(start_iterator, end_iterator); + + context.add(character); + octet_iterator = start_iterator; + } + left_over = 0; + } + catch (const utf8::not_enough_room&) + { + std::copy(octet_iterator, end_iterator, std::begin(buffer)); + left_over = std::distance(octet_iterator, end_iterator); + } + } + return context; +} + +/* + * Reads a UTF-8 file from stdin, analyzes it and prints context information. + */ +int main(int argc, char **argv) +{ + context_model context = process_input(); + + std::size_t i{ 0 }; + for (auto [context_characters, occurrence]: context) + { + ++i; + std::cout << i << ". " << context_characters << ": "; + + for (auto [character, count]: occurrence) + { + std::string character_bytes; + utf8::append(character, character_bytes); + + std::cout << character_bytes << " - " << count << "; "; + } + std::cout << std::endl; + } + + return EXIT_SUCCESS; +} -- cgit v1.2.3