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

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

10.10.2015, 16:49. Показов 6741. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru