Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 28.09.2017
Сообщений: 11
1

Std::stringstream

16.08.2019, 18:34. Показов 1295. Ответов 3
Метки нет (Все метки)

Добрый день! Я не понимаю почему я ввожу в поток std::stringstream три элемента, число, строку и число. Почему цикл выполняется 4 раза и строка "asd" выводится дважды? в середине и в самом конце? Как сделать так что бы из потока std::stringstream числа помещались в один вектор, а строки в другой? Заранее спасибо.
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
setlocale(LC_ALL, "Russian");
 
    std::stringstream ss;
    long long loc_ll;
    long long loc_ll_two = 0;
    std::string loc_str;
 
    ss << "123" << endl;
    ss << "asd" << endl;
    ss << "456" << endl;
 
    cout << "Поток содержит: " << ss.str() << endl;
 
    cout << "В строковый поток введены следующие данные:" << endl;
    cout << "123" << endl;
    cout << "asd" << endl;
    cout << "456" << endl;
 
    while (ss.eof() == false)
    {
        ++loc_ll_two;
        ss >> loc_ll;
        if (ss.good() == false)
        {
            ss.clear();
            ss >> loc_str;
            cout << "Из потока выведена строка: " << loc_str << endl;
        }
        else
        {
            cout << "Из потока выведено целое число: " << loc_ll << endl;
        }
 
        cout << "Итерация цикла номер: " << loc_ll_two << endl;
    }
          
    return 0;
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2019, 18:34
Ответы с готовыми решениями:

Странное поведение std::string, полученного из std::stringstream
Есть код #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;cstring&gt; int main() { ...

std::stringstream precision
Как обрезать количество символов во входной строковой поток? к примеру: float a=4.768123;...

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

Как сделать std::stringstream
Как преобразовать из &quot;const char *&quot; в &quot;LPCWSTR&quot; ... std::stringstream Str_Stream; Str_Stream...

3
Нарушитель
1486 / 1288 / 485
Регистрация: 16.08.2014
Сообщений: 5,415
Записей в блоге: 1
16.08.2019, 19:00 2
DimaF24, может как то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while (ss >> loc_ll || ss.eof() == false)
    {
        ++loc_ll_two;
        if (ss.good() == false)
        {
            ss.clear();
            ss >> loc_str;
            cout << "Из потока выведена строка: " << loc_str << endl;
        }
        else
        {
            cout << "Из потока выведено целое число: " << loc_ll << endl;
        }
 
        cout << "Итерация цикла номер: " << loc_ll_two << endl;
    }
0
Модератор
Эксперт С++
11071 / 9128 / 5485
Регистрация: 18.12.2011
Сообщений: 24,399
16.08.2019, 20:04 3
Цитата Сообщение от DimaF24 Посмотреть сообщение
ss.eof()== false
Когда вижу такие выражения, то прихожу в ужас.
Результат логического выражения - это либо false либо true.
Зачем пытаться их сравнивать ЕЩЕ раз!!!!

Цитата Сообщение от DimaF24 Посмотреть сообщение
while (ss.eof() == false)
это
C++
1
while ( !ss.eof() )
Цитата Сообщение от _stanislav Посмотреть сообщение
while (ss >> loc_ll || ss.eof() == false)
тут достаточно написать
C++
1
while ( ss >> loc_ll )
0
6500 / 4422 / 2531
Регистрация: 18.12.2017
Сообщений: 13,827
16.08.2019, 21:01 4
Цитата Сообщение от DimaF24 Посмотреть сообщение
Как сделать так что бы из потока std::stringstream числа помещались в один вектор, а строки в другой?
числа целые ? если целые и сохранять их в векторе в виде строк, можно так:
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
#include <iostream>
#include <string>
#include <sstream> 
#include <vector>
using namespace std;
 
int main()
{    
    int i;
    bool k;
    string str="alpha 123 45 beta 3120 gamma 7", word;
    vector<string>v1;
    vector<string>v2;
    stringstream words(str);
    while (words >> word)
    {
        i=0;
        k=true;
        while(word[i])
        { 
            if(word[i]<'0' || word[i]>'9') k=false;
            i++;
        }
        if(k) v1.push_back(word);
        else v2.push_back(word);       
    }
    
    cout << "Numbers:\n";
    for(auto e : v1) {
        cout << e << " ";
    }
    cout << "\nWords:\n";
    for(auto e : v2) {
        cout << e << " ";
    }
    cout << "\n";
system("pause");
return 0;
}
если нужно как-то по другому, сообщите.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2019, 21:01

как узнать размер std::stringstream
в обьект типа stringstream пишем неизвестное число байт. Как узнать сколько байт записалось в поток?

Сбрасывается форматирование std::stringstream при очистке потока
Имеем объект класса std::stringstream используемый для форматированного вывода. Перед очередным...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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