| fn main() { |
| // (all the type annotations are superfluous) |
| // A reference to a string allocated in read only memory |
| let pangram: &'static str = "the quick brown fox jumps over the lazy dog"; |
| println!("Pangram: {}", pangram); |
| |
| // Iterate over words in reverse, no new string is allocated |
| println!("Words in reverse"); |
| for word in pangram.words().rev() { |
| println!("> {}", word); |
| } |
| |
| // Copy chars into a vector, sort and remove duplicates |
| let mut chars: Vec<char> = pangram.chars().collect(); |
| chars.sort(); |
| chars.dedup(); |
| |
| // Create an empty and growable `String` |
| let mut string = String::new(); |
| for c in chars.move_iter() { |
| // Insert a char at the end of string |
| string.push_char(c); |
| // Insert a string at the end of string |
| string.push_str(", "); |
| } |
| |
| // The trimmed string is a slice to the original string, hence no new |
| // allocation is performed |
| let trimmed_str: &str = string.as_slice().trim_chars(&[',', ' ']); |
| println!("Used characters: {}", trimmed_str); |
| |
| // Heap allocate a string |
| let alice = String::from_str("I like dogs"); |
| // Allocate new memory and store the modified string there |
| let bob: String = alice.replace("dog", "cat"); |
| |
| println!("Alice says: {}", alice); |
| println!("Bob says: {}", bob); |
| } |