Итак, целевой язык - C++. Это значит мы - радостные обладатели технологии потоков, с коей мы будем производить весь ввод/вывод как при работе с файлами, так и при работе со стандартным вводом/выводом (консолью).
Ну а раз уж мы работаем с потоками, то будем делать это красивенько: создадим класс-обёртку для потока ввода, цель которого - поиск в этом потоке цитат и отправка их на поток вывода (который мы передаём).
[!] Стоит отметить, что по заданию не сказано, что есть разница между ' и ". Поэтому будем считать их одинаковыми.
[!] Внимание! Рядом с исполняемым файлом надо создать текстовый файл data.txt c текстом и цитатами.
Код
С++11
#include <iostream>#include <fstream>using std::cout;class QuotesFinder { std::istream &in_stream; bool is_it_in_quote = false;public: QuotesFinder() = delete; QuotesFinder(QuotesFinder&&) = default; QuotesFinder(QuotesFinder const&) = default; explicit QuotesFinder(std::istream &is) : in_stream(is) {} [[nodiscard]] bool eof() const { return in_stream.eof(); } // Вот тут происходит вся магия QuotesFinder& operator >> (std::ostream& out_stream) { char buffer; in_stream.get(buffer); //Получаем очередной символ из потока if (buffer == '\"' || buffer == '\'') { if (is_it_in_quote) { is_it_in_quote = false; out_stream << buffer; out_stream << "\n"; return *this; } is_it_in_quote = true; } if (is_it_in_quote) { out_stream << buffer; } return *this; }};int main() { std::ifstream file("data.txt"); // Открываем файл if (!file.is_open()) { cout << "File is not exits!"; return 1; } QuotesFinder finder(file); // Создаём обёртку из файлового потока while (!finder.eof()) // Пока не достигли конца потока finder >> cout; // переправляем очередной кусок информации в поток вывода}
4004
1972, 4-й квартал: 4040
1972, 1 апреля: 8008
1974, 1 апреля: 8080
1976, март: 8085
1978, 8 июня: 8086
1979, 1 июня: 8088
1981, 1 января: iAPX 432
1982, 80186, 80188
1982, 1 февраля: 80286
1985, 17 октября: 80386DX
1988, 5 апреля: i960 aka 80960
1988, 16 июня: 80386SX
1989, 16 января: 80376[источник не указан 86 дней]
1989, 27 февраля: i860 aka 80860
1989, 10 апреля: 80486DX
1990, 15 октября: 80386SL
1991, 22 апреля: 80486SX
1992, 3 марта: 80486DX2
1992, 9 ноября: 80486SL
1993, 22 марта: Pentium
1994, 7 марта: 80486DX4
1994, август: Intel386 EX
1995, 1 ноября: Pentium Pro
1997, 8 января: Pentium MMX
1997, 7 мая: Pentium II
1998, 15 апреля: Celeron (Pentium II-based)
1998, 29 июня: Pentium II Xeon
1999, 26 февраля: Pentium III
1999, 25 октября: Pentium III Xeon
2000, 23 августа: XScale
2000, 20 ноября: Pentium 4
2001: Itanium
2001, 21 мая: Xeon
2002, июль: Itanium 2
2003, март: Pentium M
2003, март: Celeron M
2003, сентябрь: Pentium 4EE
2004, весна: EM64T
2005, 2 квартал: Pentium D
2006: Pentium Dual-Core
2006, 27 июля: Core 2 Duo
2006, осень: Core 2 Extreme
2007, январь: Core 2 Quad
2008, 1 квартал: Core 2 обновление линейки
2008, 2 квартал: Centrino Atom
2008, 3 квартал: Core i7
2009, 4 квартал: Core i5
2010, 1 квартал: Core i3
2011, 2 квартал: Celeron/Pentium Sandy Bridge (2-е поколение)
2011, 3 квартал: Сore i3, i5, i7, i7 — Extreme Edition Sandy Bridge
2012, 1 квартал: 22 нм, Core i3, i5, i7 — Ivy Bridge
2013, 2 квартал: 22 нм, Core i3, i5, i7 — Haswell
2014, 3 квартал: 14 нм, Core M, i3, i5, i7 — Broadwell
2015, 3 квартал: 14 нм, Core M, i3, i5, i7 — Skylake
2017, 1 квартал: 14 нм, Celeron, Pentium G, Core i3, i5, i7 — Kaby Lake (7-е поколение)
2017, 3 квартал: 14 нм, Core i9 — Skylake
2017, 4 квартал: 14 нм, Core i3, i5, i7 — Coffee Lake, i9 Skylake.
2018, конец: 14 нм — Cooper Lake[3]
2018, 4 квартал: 14 нм — i3, i5, i7, i9 Coffee Lake Refresh (8-е поколение)
2018, конец: 10 нм — Cannon Lake
2019, 3 квартал: 14 нм - Comet Lake
2020, конец: 10 нм — Ice Lake (10-е поколение)
2021: 10 нм — Tiger Lake (11-е поколение)
Итак, целевой язык - C++. Это значит мы - радостные обладатели технологии потоков, с коей мы будем производить весь ввод/вывод как при работе с файлами, так и при работе со стандартным вводом/выводом (консолью).
Ну а раз уж мы работаем с потоками, то будем делать это красивенько: создадим класс-обёртку для потока ввода, цель которого - поиск в этом потоке цитат и отправка их на поток вывода (который мы передаём).
[!] Стоит отметить, что по заданию не сказано, что есть разница между ' и ". Поэтому будем считать их одинаковыми.
[!] Внимание! Рядом с исполняемым файлом надо создать текстовый файл data.txt c текстом и цитатами.
КодС++11
#include <iostream>#include <fstream>using std::cout;class QuotesFinder { std::istream &in_stream; bool is_it_in_quote = false;public: QuotesFinder() = delete; QuotesFinder(QuotesFinder&&) = default; QuotesFinder(QuotesFinder const&) = default; explicit QuotesFinder(std::istream &is) : in_stream(is) {} [[nodiscard]] bool eof() const { return in_stream.eof(); } // Вот тут происходит вся магия QuotesFinder& operator >> (std::ostream& out_stream) { char buffer; in_stream.get(buffer); //Получаем очередной символ из потока if (buffer == '\"' || buffer == '\'') { if (is_it_in_quote) { is_it_in_quote = false; out_stream << buffer; out_stream << "\n"; return *this; } is_it_in_quote = true; } if (is_it_in_quote) { out_stream << buffer; } return *this; }};int main() { std::ifstream file("data.txt"); // Открываем файл if (!file.is_open()) { cout << "File is not exits!"; return 1; } QuotesFinder finder(file); // Создаём обёртку из файлового потока while (!finder.eof()) // Пока не достигли конца потока finder >> cout; // переправляем очередной кусок информации в поток вывода}