Предмет: Информатика,
автор: mikimouse9
Написать программу на С++. Задача - Считать текст из файла и вывести на экран только цитаты, т. е. предложения, заключенные в кавычки.
MaxLevs:
Отметишь лучшим?
Ответы
Автор ответа:
1
Итак, целевой язык - 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; // переправляем очередной кусок информации в поток вывода
- }
Приложения:
Похожие вопросы
Предмет: Русский язык,
автор: fofofon
Предмет: Қазақ тiлi,
автор: schurhnoelena
Предмет: Русский язык,
автор: Аноним
Предмет: Физика,
автор: parfenovstepan6
Предмет: Алгебра,
автор: вилена30