В Rust чтение строк из стандартного ввода (stdin) и возврат их в виде вектора (Vec) может быть обычной задачей, особенно при работе с приложениями командной строки или интерактивными программами. В этой статье блога мы рассмотрим несколько методов, которые делают этот процесс простым и эффективным. Мы предоставим примеры кода и пояснения на разговорном языке, чтобы помочь вам быстрее усвоить суть.
Метод 1: использование трейта BufRead
Трейт BufRead в Rust предоставляет удобный способ чтения строк любого типа, который его реализует, включая стандартный ввод. Вот пример:
use std::io::{self, BufRead};
fn read_lines() -> Vec<String> {
let stdin = io::stdin();
let lines = stdin.lock().lines().map(|line| line.unwrap()).collect();
lines
}
fn main() {
let lines = read_lines();
println!("{:?}", lines);
}
Метод 2: использование функции read_line()
Стандартная библиотека предоставляет функцию read_line(), которая считывает строку из заданного входного потока. Мы можем использовать эту функцию для чтения строк из стандартного ввода и сохранения их в векторе. Вот пример:
use std::io::{self, Read};
fn read_lines() -> Vec<String> {
let mut buffer = String::new();
io::stdin().read_to_string(&mut buffer).expect("Failed to read stdin");
let lines: Vec<String> = buffer.lines().map(|line| line.to_string()).collect();
lines
}
fn main() {
let lines = read_lines();
println!("{:?}", lines);
}
Метод 3: перебор строк с помощью итератора Lines()
Другой подход заключается в использовании методаlines(), предоставляемого итератором Lines. Этот метод возвращает итератор по строкам данного входного потока. Мы можем собрать эти линии в вектор. Вот пример:
use std::io::{self, BufRead};
fn read_lines() -> Vec<String> {
let stdin = io::stdin();
let lines: Vec<String> = stdin.lock().lines().map(|line| line.unwrap()).collect();
lines
}
fn main() {
let lines = read_lines();
println!("{:?}", lines);
}
Чтение строк из стандартного ввода и возврат их в виде вектора в Rust можно выполнить разными методами. В этой статье мы рассмотрели три подхода: использование типажа BufRead, использование функции read_line() и перебор строк с помощью итератора Lines. У каждого метода есть свои преимущества, поэтому выберите тот, который лучше всего подходит для вашего конкретного случая использования.
Используя эти методы, вы можете легко обрабатывать вводимые пользователем данные из командной строки, создавать интерактивные приложения или обрабатывать текстовые данные в Rust.