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

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

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

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

18.01.2013, 10:13. Просмотров 7496. Ответов 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(""), поток очищается НО после такой очистки в него ничего не запишешь...
Отсюда вопрос.
Так всётаки как правильно его пользовать???
Кто в курсе разъясните плз!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 10:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ещё раз про поток stringstream! (C++):

Ещё раз про использование указателей - C++
Здравствуйте! Проблема многих новичков, не перестроился мог на ссылки и указатели в С++. Много прочитал, просмотрел, чужие примеры...

Очистить поток std::stringstream - C++
Вызываю функцию и в ней в поток инициализирую строку lеftPPF, далее вызываю повторно функцию и иниц-я проводится еще раз, и в потоке...

Найти слова, у которых первая буква входит в слово ещё раз - C++
Ребята, помогите пожалуйста! Возникли проблемы с написанием программы на С++ Задание: В произвольном тексте (взятом из файла),...

Найти и вывести на печать слова, у которых первая буква входит в слово ещё раз - C++
Ребята, помогите пожалуйста! Завтра нужно сдавать лабу для допуска к экзамену, а я никак не могу её сделать... Задание: в произвольном...

Что здесь неправильно? (Вывести все слова строки в которых первая буква входит в него ещё раз) - C++
Задание: Вывести все слова строки в которых первая буква входит в него ещё раз. #include &lt;iostream&gt; #include &lt;string&gt; #include...

два вопроса по С++,вопрос про заг.файла и поток cin - C++
1.У меня есть заголовoчный файл,созданный в проекте А,в проекте В он нужен,как его туда добавить?Надо самим файл из папку в папку...

10
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
18.01.2013, 10:25 #2
C++
1
2
ss.str("");
ss.clear();
1
IPavel
9 / 9 / 0
Регистрация: 14.01.2013
Сообщений: 102
18.01.2013, 10:34  [ТС] #3
Спасибо!
Тоже об этом думал...
Вот может кто знает что происходит в потоке и разжуёт новичку...
Почему к примеру при clear() в потоки остаются данные и что сбрасывается...
А при str("") в поток ничего не запишешь...
Так сказать для глубокого понимания сего действа...
0
Croessmah
Эксперт CЭксперт С++
13413 / 7564 / 855
Регистрация: 27.09.2012
Сообщений: 18,618
Записей в блоге: 3
Завершенные тесты: 1
18.01.2013, 10:39 #4
если не ошибаюсь, то после str("") поток переходит в ошибочное состояние и естевственно с ним нельзя работать. clear же сбрасывает флаги состояния
0
Пaтрик
18.01.2013, 10:55
  #5

Не по теме:

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

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

Не по теме:

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

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

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

Как-то так
Спс!
За п3 в особенности.
Не знал что после считывания туда eof пихается.
0
Majorrr
Сообщений: n/a
21.03.2013, 18:06 #11
Спасибо за исчерпывающую и полезную информацию.

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:06
Привет! Вот еще темы с ответами:

Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это? - C++
Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это? КОд:#include &quot;stdafx.h&quot; ...

В заданном символьном массиве найти слова, в которых первая буква слова встречается в нём ещё 1 раз - C++
Дан символьный массив. Вывести на печать те слова, в которых первая буква слова встречается в нём ещё 1 раз. гуглил, искал, нету подобной...

Еще раз про setw: не определяется, хотя все файлы импортированы - C++
скрины как решилась проблема.

Stringstream C++ - C++
Доброго времени суток! Совсем недавно мне понадобились преобразования int to string и наоборот. Заинтересовал метод, используя...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
21.03.2013, 18:06
Ответ Создать тему
Опции темы

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