Suppose we have a string
in our Rust program and want it to have an uppercase first letter. We can transform "bird" into "Bird."
With some logic, we can copy the strings and uppercase certain letters in them. The chars()
iterator is useful for looping over the initial string
.
To begin we introduce 2 functions, uppercase_first
and uppercase_words
. These functions receive a str
reference, and then return a new String
.
uppercase_first
, we call to_ascii_uppercase()
on the first char
in the string. Other chars are left unchanged.uppercase_words
, we call to_ascii_uppercase()
on the first char
in the string. Any chars after a space are also considered first chars.fn uppercase_first(data: &str) -> String { // Uppercase first letter. let mut result = String::new(); let mut first = true; for value in data.chars() { if first { result.push(value.to_ascii_uppercase()); first = false; } else { result.push(value); } } result } fn uppercase_words(data: &str) -> String { // Uppercase first letter in string, and letters after spaces. let mut result = String::new(); let mut first = true; for value in data.chars() { if first { result.push(value.to_ascii_uppercase()); first = false; } else { result.push(value); if value == ' ' { first = true; } } } result } fn main() { let test = "bird frog"; println!("UPPERCASE FIRST: {}", uppercase_first(test)); println!("UPPERCASE_WORDS: {}", uppercase_words(test)); }UPPERCASE FIRST: Bird frog UPPERCASE_WORDS: Bird Frog
Many functions in Rust, like those used for implementing the uppercasing of first letters, are about the same as in other languages. Str reference arguments are important to understand.