mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-10-31 21:48:49 +00:00
69 lines
2.1 KiB
Rust
69 lines
2.1 KiB
Rust
// ./src/std/str.md
|
|
|
|
|
|
fn part0() {
|
|
// (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.split_whitespace().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 {
|
|
// Insert a char at the end of string
|
|
string.push(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 chars_to_trim: &[char] = &[' ', ','];
|
|
let trimmed_str: &str = string.trim_matches(chars_to_trim);
|
|
println!("Used characters: {}", trimmed_str);
|
|
|
|
// Heap allocate a string
|
|
let alice = String::from("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);
|
|
}
|
|
|
|
fn part1() {
|
|
// You can use escapes to write bytes by their hexadecimal values...
|
|
let byte_escape = "I'm writing \x52\x75\x73\x74!";
|
|
println!("What are you doing\x3F (\\x3F means ?) {}", byte_escape);
|
|
|
|
// ...or Unicode code points.
|
|
let unicode_codepoint = "\u{211D}";
|
|
let character_name = "\"DOUBLE-STRUCK CAPITAL R\"";
|
|
|
|
println!("Unicode character {} (U+211D) is called {}",
|
|
unicode_codepoint, character_name );
|
|
|
|
|
|
let long_string = "String literals
|
|
can span multiple lines.
|
|
The linebreak and indentation here ->\
|
|
<- can be escaped too!";
|
|
println!("{}", long_string);
|
|
}
|
|
|
|
pub fn main() {
|
|
part0();
|
|
part1();
|
|
}
|
|
|