При работе с конвейерами в программировании на C++ часто необходимо захватить выходные данные одной команды и использовать их в качестве входных данных для другой команды. Одна из распространенных задач — прочитать выходные данные из канала и сохранить их в переменной с помощью функции getline. В этой статье мы рассмотрим различные методы решения этой задачи, а также приведем примеры кода.
Метод 1: использование строкового потока
#include <iostream>
#include <sstream>
int main() {
std::string line;
std::stringstream ss;
// Read input from pipe
while (std::getline(std::cin, line)) {
ss << line << std::endl;
}
// Store output in a variable
std::string pipeOutput = ss.str();
// Use the stored output as needed
std::cout << "Pipe output: " << pipeOutput << std::endl;
return 0;
}
Метод 2. Использование строкового буфера
#include <iostream>
#include <string>
#include <vector>
int main() {
std::string line;
std::vector<std::string> buffer;
// Read input from pipe
while (std::getline(std::cin, line)) {
buffer.push_back(line);
}
// Store output in a variable
std::string pipeOutput;
for (const auto& str : buffer) {
pipeOutput += str + "\n";
}
// Use the stored output as needed
std::cout << "Pipe output: " << pipeOutput << std::endl;
return 0;
}
Метод 3. Использование специального разделителя
#include <iostream>
#include <string>
int main() {
std::string line;
std::string pipeOutput;
// Read input from pipe
while (std::getline(std::cin, line, '|')) {
pipeOutput += line + "\n";
}
// Use the stored output as needed
std::cout << "Pipe output: " << pipeOutput << std::endl;
return 0;
}
В этой статье мы рассмотрели различные методы сохранения выходных данных канала в переменную с помощью функции getlineв C++. Первый метод включал использование строкового потока, который обеспечивает гибкий способ обработки входных данных. Второй метод использовал строковый буфер для хранения каждой строки входных данных, а третий метод продемонстрировал использование специального разделителя для разделения входных данных на разделы. В зависимости от ваших конкретных требований вы можете выбрать метод, который лучше всего соответствует вашим потребностям.
Используя эти методы, вы можете эффективно захватывать выходные данные из канала и сохранять их в переменной для дальнейшей обработки в программах на C++.