Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.67
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
#1

Ещё раз про поток stringstream! - C++

18.01.2013, 10:13. Просмотров 6649. Ответов 10
Метки нет (Все метки)

Всем привет!
Вобщем понадобился мне этот поток...
Поискал я как его очищать... Нашёл несколько способов...
Собственно метод str("") и метод clear().
Первый как я понял зачищает строку нулевым значением, а второй сбрасывает флаги у потока.
И вот что у меня получилось.
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
#include <iostream>
#include <sstream>
 
using namespace std;
 
int main()
{
 string st;
  stringstream ss;
   cout << "Передаём потоку слово." << endl;
    ss << "слово";
     cout << "смотрим что в потоке: " << ss.str() << endl;
      ss >> st;
       cout << "смотрим что в строке: " << st << endl;
        ss.clear();
         cout << "Очистили поток clear и смотрим: " << ss.str() << endl;
          ss << "мечта";
           cout << "смотрим что теперь в потоке: " << ss.str() << endl;
            ss >> st;
             cout << "смотрим что в строке: " << st << endl;
 ss.clear();
  cout << "очистили ещё раз: " << ss.str() << endl;
             ss << "счастье";
  cout << "пробуем ещё раз, смотрим: " << ss.str() << endl;
   ss >> st;
    cout << "смотрим ещё раз на строку: " << st << endl;
             ss.str("");
               cout << "очистили поток str и смотрим: " << ss.str() << endl;
                ss << "любовь";
                 cout << "смотрим что в потоке: " << ss.str() << endl;
                  ss >> st;
                   cout << "смотрим что в строке: " << st << endl;
                    return 0;
                     }
Компилим и запускаем.
ipavel@raspberrypi:~/cpp_progs$ ./test
Передаём потоку слово.
смотрим что в потоке: слово
смотрим что в строке: слово
Очистили поток clear и смотрим: слово
смотрим что теперь в потоке: словомечта
смотрим что в строке: мечта
очистили ещё раз: словомечта
пробуем ещё раз, смотрим: словомечтасчастье
смотрим ещё раз на строку: счастье
очистили поток str и смотрим:
смотрим что в потоке:
смотрим что в строке: счастье
ipavel@raspberrypi:~/cpp_progs$
Вобщем при clear(), в потоке так и остаются данные, хотя в переменную он пишит правильно.
Т.е. только то что было передано ему в последний раз.
При методе же str(""), поток очищается НО после такой очистки в него ничего не запишешь...
Отсюда вопрос.
Так всётаки как правильно его пользовать???
Кто в курсе разъясните плз!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 10:13     Ещё раз про поток stringstream!
Посмотрите здесь:

C++ два вопроса по С++,вопрос про заг.файла и поток cin
C++ Найти и вывести на печать слова, у которых первая буква входит в слово ещё раз
C++ std::stringstream precision
Stringstream и считывание по строчно C++
Что здесь неправильно? (Вывести все слова строки в которых первая буква входит в него ещё раз) C++
C++ Найти слова, у которых первая буква входит в слово ещё раз
C++ Ещё раз про использование указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,738
Записей в блоге: 2
Завершенные тесты: 1
18.01.2013, 10:25     Ещё раз про поток stringstream! #2
C++
1
2
ss.str("");
ss.clear();
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
18.01.2013, 10:34  [ТС]     Ещё раз про поток stringstream! #3
Спасибо!
Тоже об этом думал...
Вот может кто знает что происходит в потоке и разжуёт новичку...
Почему к примеру при clear() в потоки остаются данные и что сбрасывается...
А при str("") в поток ничего не запишешь...
Так сказать для глубокого понимания сего действа...
Croessmah
Модератор
Эксперт CЭксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,738
Записей в блоге: 2
Завершенные тесты: 1
18.01.2013, 10:39     Ещё раз про поток stringstream! #4
если не ошибаюсь, то после str("") поток переходит в ошибочное состояние и естевственно с ним нельзя работать. clear же сбрасывает флаги состояния
Пaтрик
18.01.2013, 10:55
  #5

Не по теме:

Стиль Маяковского в форматировании программного кода о_О

IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
18.01.2013, 12:02  [ТС]     Ещё раз про поток stringstream! #6
Цитата Сообщение от Пaтрик Посмотреть сообщение

Не по теме:

Стиль Маяковского в форматировании программного кода о_О

))
Эт не я ... Эт notepad ++...
Поправлять было просто лень...
А он вобще с отступами такую чушь несёт...
Croessmah
Модератор
Эксперт CЭксперт С++
12730 / 7190 / 802
Регистрация: 27.09.2012
Сообщений: 17,738
Записей в блоге: 2
Завершенные тесты: 1
18.01.2013, 12:18     Ещё раз про поток stringstream! #7
У меня Notepad++ и все нормально с отступами.
ya_noob
_
201 / 145 / 9
Регистрация: 08.10.2011
Сообщений: 432
18.01.2013, 12:53     Ещё раз про поток stringstream! #8
1. метод clear() не очищает содержимое строки, он сбрасывает флаги ошибок;
2. метод str(...) возвращает / меняет содержимое srting в потоке, он не меняет состояние флагов
3. вот эта штука: "ss >> st" считывает из потока данные до конца и устанавливает флаг eof и теперь в поток нельзя ничего записать. Выход: вам перед строкой 29 надо вбить вот это: ss.clear();

Как-то так
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
18.01.2013, 12:54  [ТС]     Ещё раз про поток stringstream! #9
Цитата Сообщение от Croessmah Посмотреть сообщение
У меня Notepad++ и все нормально с отступами.
Просто получается такая фигня у меня...
Я привык писать в простом текстовом консольном редакторе,
И отступы проставляю сам уже на автомате...
А в нотпаде один раз поставил и до следующего блока...
Вот и получается такая иерархия у меня...
Я на первой строке поставил отступ, он запомнил.
На вторую строку перешёл он поставил отступ, и я на автомате поставил и дальше код стучу.
На третьей он поставил два смотря на строку выше, и я автоматом опять воткнул один...
Вобщем не приучен я к этим плюшкам...
А потом уже поправлять всё лень...
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
18.01.2013, 13:01  [ТС]     Ещё раз про поток stringstream! #10
Цитата Сообщение от ya_noob Посмотреть сообщение
1. метод clear() не очищает содержимое строки, он сбрасывает флаги ошибок;
2. метод str(...) возвращает / меняет содержимое srting в потоке, он не меняет состояние флагов
3. вот эта штука: "ss >> st" считывает из потока данные до конца и устанавливает флаг eof и теперь в поток нельзя ничего записать. Выход: вам перед строкой 29 надо вбить вот это: ss.clear();

Как-то так
Спс!
За п3 в особенности.
Не знал что после считывания туда eof пихается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:06     Ещё раз про поток stringstream!
Еще ссылки по теме:

C++ Использование stringstream
C++ Stringstream C++
C++ Очистить поток std::stringstream
C++ Еще раз про setw: не определяется, хотя все файлы импортированы
C++ В заданном символьном массиве найти слова, в которых первая буква слова встречается в нём ещё 1 раз

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

Или воспользуйтесь поиском по форуму:
Majorrr
Сообщений: n/a
21.03.2013, 18:06     Ещё раз про поток stringstream! #11
Спасибо за исчерпывающую и полезную информацию.

Не по теме:

А оформление кода у вас действительно

Yandex
Объявления
21.03.2013, 18:06     Ещё раз про поток stringstream!
Ответ Создать тему
Опции темы

Текущее время: 15:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru