fn format_lines(words: &[&str], max_width: usize) -> Vec<String> {
let mut result: Vec<String> = Vec::new();
let mut current_line = String::new();
let mut current_length = 0;
for word in words {
let word_len = word.len();
// If adding this word exceeds max_width, push current line
if current_length + if current_line.is_empty() { 0 } else { 1 } + word_len > max_width {
if !current_line.is_empty() {
result.push(current_line.clone());
}
current_line.clear();
current_line.push_str(word);
current_length = word_len;
} else {
if !current_line.is_empty() {
current_line.push(' ');
current_length += 1;
}
current_line.push_str(word);
current_length += word_len;
}
}
// Push the last line if not empty
if !current_line.is_empty() {
result.push(current_line);
}
result
}
fn main() {
let words = vec![
"This", "is", "a", "programming", "example", "of", "text", "wrapping",
];
let max_width = 12;
let lines = format_lines(&words, max_width);
for line in lines {
println!("\"{}\"", line);
}
}
/*
run:
"This is a"
"programming"
"example of"
"text"
"wrapping"
*/