rustlings/exercises/09_strings/strings3.rs

61 lines
1.6 KiB
Rust

fn trim_me(input: &str) -> &str {
// TODO: Remove whitespace from both ends of a string
// can find the 1st not whitespace and last not whitespace and then return slice
let f = input
.find(|c: char| !c.is_whitespace())
.unwrap_or(input.len());
let r = input.rfind(|c: char| !c.is_whitespace()).unwrap_or(0);
if f < r {
&input[f..r + 1]
} else {
&input[..input.len() - f]
}
// input.trim()
}
fn compose_me(input: &str) -> String {
// TODO: Add " world!" to the string! There are multiple ways to do this.
input.to_owned() + " world!"
}
fn replace_me(input: &str) -> String {
// TODO: Replace "cars" in the string with "balloons".
input.to_owned().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(" "), "");
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",
);
}
}