Итак, целевой язык - 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; // переправляем очередной кусок информации в поток вывода}
1) 89₁₀ = 1011001₂
2) 600₁₀ = 100101100₂
3) 2010₁₀ = 11111011010₂
1) 513₁₀ = 1001₈
2) 600₁₀ = 1130₈
3) 2010₁₀ = 3732₈
Объяснение:
1)
89 / 2 = 44 + остаток 1
44 / 2 = 22 + остаток 0
22 / 2 = 11 + остаток 0
11 / 2 = 5 + остаток 1
5 / 2 = 2 + остаток 1
2 / 2 = 1 + остаток 0
1 / 2 = 0 + остаток 1
записываем остатки снизу вверх
89₁₀ = 1011001₂
2)
600 / 2 = 300 + остаток 0
300 / 2 = 150 + остаток 0
150 / 2 = 75 + остаток 0
75 / 2 = 37 + остаток 1
37 / 2 = 18 + остаток 1
18 / 2 = 9 + остаток 0
9 / 2 = 4 + остаток 1
4 / 2 = 2 + остаток 0
2 / 2 = 1 + остаток 0
1 / 2 = 0 + остаток 1
записываем остатки снизу вверх
600₁₀ = 100101100₂
3)
2010 / 2 = 1005 + остаток 0
1005 / 2 = 502 + остаток 1
502 / 2 = 251 + остаток 0
251 / 2 = 125 + остаток 1
125 / 2 = 62 + остаток 1
62 / 2 = 31 + остаток 0
31 / 2 = 15 + остаток 1
15 / 2 = 7 + остаток 1
7 / 2 = 3 + остаток 1
3 / 2 = 1 + остаток 1
1 / 2 = 0 + остаток 1
записываем остатки снизу вверх
2010₁₀ = 11111011010₂
1)
513 / 8 = 64 + остаток 1
64 / 8 = 8 + остаток 0
8 / 8 = 1 + остаток 0
1 / 8 = 0 + остаток 1
записываем остатки снизу вверх
513₁₀ = 1001₈
2)
600 / 8 = 75 + остаток 0
75 / 8 = 9 + остаток 3
9 / 8 = 1 + остаток 1
1 / 8 = 0 + остаток 1
записываем остатки снизу вверх
600₁₀ = 1130₈
3)
2010 / 8 = 251 + остаток 2
251 / 8 = 31 + остаток 3
31 / 8 = 3 + остаток 7
3 / 8 = 0 + остаток 3
записываем остатки снизу вверх
2010₁₀ = 3732₈
Итак, целевой язык - 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; // переправляем очередной кусок информации в поток вывода}