Написать программу, которая сможет обработать данные из предыдущего задания используя оператор потока в соответствии с заданием.
Используя второй оператор потока передать результат работы функции утилите cowsay
Создадим простой проект, который сможет обработать входной поток данных и вывести что-то в ответ.
И так, пишем:
mkdir cp033
cd $_
создадим там файлик main.cpp
и напишем в него
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
string line;
while (true) {
getline(cin, line); // считываем введенную строку
if (line == "") // если строка пустая, то выходим из цикла
break;
cout << line << endl; // иначе пишем считанную строку в ответ
}
return 0;
}
это так называемое echo приложение, мы пишем что-то, и оно в ответ нам пишет тоже самое.
Давайте скомпилируем его
g++ main.cpp -o main
и запустим:
В принципе все до боли банально.
Но намного интереснее становится, когда вы используете такое приложение вместе с каким-то другим приложением которое может генерировать поток данных.
Например, есть утилита seq
которая позволяет генерить последовательности чисел, работает примерно так:
так вот, мы можем использовать результат генерации этой утилиты как входной поток данных для другой утилиты. Для этого используется так называемый stream-оператор |
Ну, то есть, мы как будто подменяем человека который пишет числа, утилитой которая пишет числа. С точки зрения программы которая эти числа принимает – ей все равно.
Работает это так. Вы пишите сначала команду которая генерирует поток данных, а затем команду которая обрабатывает поток:
тут не очень наглядно, давайте сделаем чтобы наша программа выводила квадраты чисел.
Правим:
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
string line;
while (true) {
getline(cin, line);
if (line == "")
break;
int a = atoi(line.c_str()); // преобразуем строку в число
cout << a * a << endl; // а тут будем теперь выводить квадраты
}
return 0;
}
запускаем
вроде работает.
А теперь пусть значение генерит seq
красота! =) Кстати, заметьте, что входные значение не видны, видны только преобразованные.
Вообще, оператор можно использовать несколько раз:
У нас тут уже получается возведение в четвертую степень. То есть мы передаем результат нашей программы своей же программе
Еще в linux есть прикольная абсолютно бесполезная утилита, которая позволяет вывести результат работы функции как мысли коровы. Называется она cowsay. Устанавливается вот так
sudo apt install cowsay
зато потом вы можете делать так
вообще там не только корову можно использовать можно дракона с коровой
полный список зверей можно получить через cowsay -l
который кстати тоже можно передать в качестве текста самой команду cowsay
выглядит прикольно плюс так как эта утилита работает с входным потоком то она вполне подойдет под нашу задачу.
Написать программу, которая сможет обработать данные из предыдущего задания используя оператор потока в соответствии с заданием.
Используя второй оператор потока передать результат работы функции утилите cowsay
Утилита для поиска наибольшего элемента/самого длиного слова
Утилита для поиска наименьшего элемента/самого короткого слова
Утилита для поиска среднего значения/слова стоящего по середине при упорядочении списка слов по алфавиту
Утилита для подсчета суммы элементов/собирающая список обратно в предложение