Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690

Чтение строк из потока

10.10.2015, 16:49. Показов 6915. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем!
Вопрос мой заключается в том, правильно ли я понял суть задания.
Мне нужно создать класс, который сможет как читать строки из потока, так и сохранять разные потоки у себя в каком-либо виде.
Правильно ли я понимаю, что мне нужно использовать именно поток ввода
C++
1
std::istringstream
? Или поток вывода? Или и тот и дугой?
Вот смутила что-то эта фраза "читать строки из потока" и все тут.
Заранее всем большое спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2015, 16:49
Ответы с готовыми решениями:

Чтение из потока буковок:)
Задание: Дан файл, содержит текст, набранный заглавными русскими буквами. Провести частотный анализ текста, т.е указать (в процентах),...

Чтение блоками из потока
Всем привет. Пытаюсь решить такую задачу, нужно читать поток блоками заданного размера, например по 10 метров. И каждый такой блок...

Чтение из потока в вектор и в struct
Читаю книгу Accelerated C++. Книга старая и использует позапрошлую версию С++. Автор приводит следующий пример: struct Student_info { ...

22
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
10.10.2015, 22:44  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от nmcf Посмотреть сообщение
out - это куда считанная строка записывается. Читай getline()'ом.
Точно, спасибо.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.10.2015, 00:25
Лучший ответ Сообщение было отмечено Gr1f0nn как решение

Решение

Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Напишите объявление абстрактного класса TInputStringStream с методом
virtual bool ReadLine(std::string& out);
без реализации. Интерфейс дает читать строки из потока, возвращает true в случае успеха и false, если поток закончился.
Напишите класс TInputStringStreamChain, который сам будет реализовывать интерфейс TInputStringStream, и в дополнение к нему будет иметь метод AddStream, который будет принимать на вход указатель на другой TInputStringStream и сохранять его у себя. Так же он должен реализовывать следующую логику: при вызове ReaLine будет читать строки из сохраненных потоков в порядке их добавления. Как только сохраненный поток вернет false – TInputStringStreamChain переходит к следующему из них.
http://rextester.com/SLY39307

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <sstream>
#include <iostream>
#include <vector>
 
class TInputStringStream
{
public:
    TInputStringStream(const std::string& s)
        : mStream(s) 
        {}
    
    virtual ~TInputStringStream() {}
    virtual bool ReadLine(std::string& out) = 0;
    
protected:
    inline const std::stringstream& GetStream()const 
        { return mStream; }
    inline std::stringstream& GetStream() 
        { return mStream; }
    
    inline const std::stringstream& 
    GetStream(const TInputStringStream& target)
        { return target.GetStream(); }
    
    inline std::stringstream& 
    GetStream(TInputStringStream& target)
        { return target.GetStream(); }
    
private:
     std::stringstream mStream;    
};
 
class TInputStringStreamChain : public TInputStringStream
{
public:
    TInputStringStreamChain(const std::string& s)
        :TInputStringStream(s)
        , mStreams() 
    {}
    
    virtual bool ReadLine(std::string& out)
    {
        std::string data;
        auto& stream = GetStream();
        if(stream)
            return 
                stream >> data,
                std::cout<<"[NEXT] "<< data,
                true;
        for(auto& ss: mStreams)
            if( auto& cur = this->GetStream(*ss))
                return 
                    cur >> data,
                    std::cout<< "[NEXT] " << data,
                    true;
                 
        return false;
    }
    
    inline TInputStringStreamChain& operator()(TInputStringStream& stream)
        { return AddStream(stream); }
    
    inline TInputStringStreamChain&
    AddStream(TInputStringStream& stream)
    { 
        mStreams.emplace_back(&stream); 
        return *this;
    }
private:
    std::vector<TInputStringStream*> 
        mStreams;
};
 
 
 
int main()
{
    std::cout<<"hello, world\n";
    
    TInputStringStreamChain ss1("[ рядовой коля ] коля любит мамбу!");
    TInputStringStreamChain ss2("[ рядовой вася ] вася любит мамбу!");
    TInputStringStreamChain ss3("[ рядовой негр мамба] а мамба вас всех нэнавидит!");
    
    ss1.AddStream(ss2)(ss3);
    std::string out;
    while(ss1.ReadLine(out) )
        std::cout<< out<<std::endl;
    
}
1
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
11.10.2015, 02:09  [ТС]
hoggy, Спасибо большое!
Теперь хотя бы понял, что нужно было получить в идеале.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2015, 02:09

чтение строки как потока
Если у меня в текстовом файле (ifstream &amp;fin) хранится какая-то последовательности n чисел, то я читаю её например так: for(int...

Чтение файла из входного потока
есть код в нем есть путь к файлу, как мне сделать так чтоб я не писал путь к файлу а данные считывались при если допустим я запущу вот так...

Cin, чтение с конца полученного потока
Происходит ввод с клавиатуры последовательности чисел разделенных пробелами, нужно извлечь из этого потока последнее значение. Как?

Чтение числа из потока и обработка ошибок
Есть поток. Из потока читается число. При чтении происходит сбой. Как узнать что конкретно сбойнуло (число слишком большое/это не число/в...

Считывание строк из потока файлов
люди плз помогите разобраться. в конце компиляции выдает сообщение &quot;error C2228: left of '.close' must have class/struct/union&quot;....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Задача: Программно добавить префикс в нумерацию документов в самописной конфигурации на БСП (помощь начинающему коллеге). Решение: В модуле объекта документа размещен следующий код: Процедура. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru