У C++ потік (stream) — це спосіб запису або зчитування даних.
Як це працює: з клавіатури дані потрапляють у потік (cin), з потоку у програму, з програми у потік (cout), а з нього на екран.
stringstream — це спеціальний потік, який працює з рядками, а не з клавіатурою або екраном.
Він працює так: з рядка дані потрапляють у потік (stringstream), з потоку читаємо дані у програму, з програми такий же потік виводить дані знов у рядок.
Для підключення в заголовній частині програми потрібно написати:
#include <sstream>
Цей потік використовується, якщо потрібно деякі дані ввести в один рядок, а потім використовувати кожне дане окремо, або загрузити всі дані у будь-який контейнер.
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;
Є рядок з цілими числами. Знайти суму всіх чисел
#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;
}
Є рядок з англійськими словами. Між словами пробіл. Вивести всі слова в стовпчик за алфавітом.
#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
*/