Вперед Зміст

Використання потоків для вводу даних

Що таке потік?

У C++ потік (stream) — це спосіб запису або зчитування даних.

Ми звикли до потоків:

Як це працює: з клавіатури дані потрапляють у потік (cin), з потоку у програму, з програми у потік (cout), а з нього на екран.

Потік stringstream:

stringstream — це спеціальний потік, який працює з рядками, а не з клавіатурою або екраном.

Він працює так: з рядка дані потрапляють у потік (stringstream), з потоку читаємо дані у програму, з програми такий же потік виводить дані знов у рядок.

Як підключити

Для підключення в заголовній частині програми потрібно написати:

#include <sstream>

Як використовувати потік stringstream?

Цей потік використовується, якщо потрібно деякі дані ввести в один рядок, а потім використовувати кожне дане окремо, або загрузити всі дані у будь-який контейнер.


string s1 = "123 456";
stringstream ss1(s1); // Створює потік ss1 із рядка s1
string s2 = "abcd qwerty";
stringstream ss2(s2); // Створює потік ss2 із рядка s2
int a, b;
ss1>>a>> b; //читаємо з потока ss1 числа у змінні 
cout<<a<<" "<<b<<endl;//виводимо їх на екран
string c, d;
ss2>>c>>d; //читаємо з потока ss2 слова у змінні 
cout<<c<<" "<<d<<endl;

Приклад 1

Є рядок з цілими числами. Знайти суму всіх чисел


#include <iostream>
using namespace std;
#include <string>
#include <sstream>
int main()
{
    string s="12 17 6 8";
    stringstream ss(s); // Створює потік ss із рядка s
    int num, summa=0;
    //Поєднання зчитування з потоку 
    //та перевірки успішності зчитування
    while (ss >> num)
    {
        summa+=num;//якщо число зчитано (true)
    }
    //false, рядок скінчився
    cout<<summa;
    return 0;
}

Приклад 2

Є рядок з англійськими словами. Між словами пробіл. Вивести всі слова в стовпчик за алфавітом.


#include <iostream>
using namespace std;
#include <string>
#include <sstream>
#include <set>
int main()
{
    string s="abme zwerty krty abcd",w;
    stringstream ss(s); // Створює потік ss із рядка s
	multiset <string> st; //запишемо у мультімножину 
    while (ss >> w)
    {
        st.insert(w);
    }
    for(string x:st)//вивід у відсортованому вигляді
    {
        cout<<x<<endl;
    }
    return 0;
}
/*результат:
abcd
abme
krty
zwerty
*/

Вперед Зміст