diff options
Diffstat (limited to 'rust/rustlings/exercises/09_strings')
| -rw-r--r-- | rust/rustlings/exercises/09_strings/README.md | 9 | ||||
| -rw-r--r-- | rust/rustlings/exercises/09_strings/strings1.rs | 8 | ||||
| -rw-r--r-- | rust/rustlings/exercises/09_strings/strings2.rs | 13 | ||||
| -rw-r--r-- | rust/rustlings/exercises/09_strings/strings3.rs | 46 | ||||
| -rw-r--r-- | rust/rustlings/exercises/09_strings/strings4.rs | 37 |
5 files changed, 113 insertions, 0 deletions
diff --git a/rust/rustlings/exercises/09_strings/README.md b/rust/rustlings/exercises/09_strings/README.md new file mode 100644 index 0000000..fa2104c --- /dev/null +++ b/rust/rustlings/exercises/09_strings/README.md @@ -0,0 +1,9 @@ +# Strings + +Rust has two string types, a string slice (`&str`) and an owned string (`String`). +We're not going to dictate when you should use which one, but we'll show you how +to identify and create them, as well as use them. + +## Further information + +- [Strings](https://doc.rust-lang.org/book/ch08-02-strings.html) diff --git a/rust/rustlings/exercises/09_strings/strings1.rs b/rust/rustlings/exercises/09_strings/strings1.rs new file mode 100644 index 0000000..482e5de --- /dev/null +++ b/rust/rustlings/exercises/09_strings/strings1.rs @@ -0,0 +1,8 @@ +fn current_favorite_color() -> String { + String::from("blue") +} + +fn main() { + let answer = current_favorite_color(); + println!("My current favorite color is {answer}"); +} diff --git a/rust/rustlings/exercises/09_strings/strings2.rs b/rust/rustlings/exercises/09_strings/strings2.rs new file mode 100644 index 0000000..b03094f --- /dev/null +++ b/rust/rustlings/exercises/09_strings/strings2.rs @@ -0,0 +1,13 @@ +fn is_a_color_word(attempt: &str) -> bool { + attempt == "green" || attempt == "blue" || attempt == "red" +} + +fn main() { + let word = String::from("green"); // Don't change this line. + + if is_a_color_word(&word) { + println!("That is a color word I know!"); + } else { + println!("That is not a color word I know."); + } +} diff --git a/rust/rustlings/exercises/09_strings/strings3.rs b/rust/rustlings/exercises/09_strings/strings3.rs new file mode 100644 index 0000000..3543ad5 --- /dev/null +++ b/rust/rustlings/exercises/09_strings/strings3.rs @@ -0,0 +1,46 @@ +fn trim_me(input: &str) -> &str { + input.trim() +} + +fn compose_me(input: &str) -> String { + String::from(input) + " world!" +} + +fn replace_me(input: &str) -> String { + String::from(input).replace("cars", "balloons") +} + +fn main() { + // You can optionally experiment here. +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn trim_a_string() { + assert_eq!(trim_me("Hello! "), "Hello!"); + assert_eq!(trim_me(" What's up!"), "What's up!"); + assert_eq!(trim_me(" Hola! "), "Hola!"); + assert_eq!(trim_me("Hi!"), "Hi!"); + } + + #[test] + fn compose_a_string() { + assert_eq!(compose_me("Hello"), "Hello world!"); + assert_eq!(compose_me("Goodbye"), "Goodbye world!"); + } + + #[test] + fn replace_a_string() { + assert_eq!( + replace_me("I think cars are cool"), + "I think balloons are cool", + ); + assert_eq!( + replace_me("I love to look at cars"), + "I love to look at balloons", + ); + } +} diff --git a/rust/rustlings/exercises/09_strings/strings4.rs b/rust/rustlings/exercises/09_strings/strings4.rs new file mode 100644 index 0000000..3f7c5e7 --- /dev/null +++ b/rust/rustlings/exercises/09_strings/strings4.rs @@ -0,0 +1,37 @@ +// Calls of this function should be replaced with calls of `string_slice` or `string`. +fn placeholder() {} + +fn string_slice(arg: &str) { + println!("{arg}"); +} + +fn string(arg: String) { + println!("{arg}"); +} + +// TODO: Here are a bunch of values - some are `String`, some are `&str`. +// Your task is to replace `placeholder(…)` with either `string_slice(…)` +// or `string(…)` depending on what you think each value is. +fn main() { + string_slice("blue"); + + string("red".to_string()); + + string(String::from("hi")); + + string("rust is fun!".to_owned()); + + string("nice weather".into()); + + string(format!("Interpolation {}", "Station")); + + // WARNING: This is byte indexing, not character indexing. + // Character indexing can be done using `s.chars().nth(INDEX)`. + string_slice(&String::from("abc")[0..1]); + + string_slice(" hello there ".trim()); + + string("Happy Monday!".replace("Mon", "Tues")); + + string("mY sHiFt KeY iS sTiCkY".to_lowercase()); +} |