Rust学习—示例2
描述:编写一个函数将姓名转换为首字母。这个型严格采用两个单词,它们之间有一个空格。
输出应该是两个大写字母,用点分隔它们。
示例:
Sam Harris=>S.H
patrick feeney=>P.F
参考代码:
// Rust test example:
extern crate rand;
#[allow(unused_imports)]
use self::rand::Rng;
#[test]
fn sample_tests() {
assert_eq!(abbrev_name("Sam Harris"), "S.H");
assert_eq!(abbrev_name("Patrick Feenan"), "P.F");
assert_eq!(abbrev_name("Evan Cole"), "E.C");
assert_eq!(abbrev_name("P Favuzzi"), "P.F");
assert_eq!(abbrev_name("David Mendieta"), "D.M");
}
#[test]
fn more_tests() {
assert_eq!(abbrev_name("george clooney"), "G.C");
assert_eq!(abbrev_name("marky mark"), "M.M");
assert_eq!(abbrev_name("eliza doolittle"), "E.D");
assert_eq!(abbrev_name("reese witherspoon"), "R.W");
}
#[test]
fn random_tests() {
let names = ["Sam x", "Harris yellow", "Patrick z", "Feenan Evan", "Cole P", "Favuzzi Greg", "David Lendieta", "george sneeze", "Kile clooney", "marky bark"];
for _ in 0..10 {
let name = names[rand::thread_rng().gen_range(0..names.len() - 1)];
assert_eq!(abbrev_name(&name), solution(&name));
}
}
fn abbrev_name(name: &str) -> String {
// code away
let mut s = name.split_ascii_whitespace().map(|x| x[..1].to_uppercase()+".").collect::<String>();
s.pop();
s
}
其他解决方案
//官方solution
fn solution(name: &str) -> String {
let mut result = String::new();
let arr: Vec<&str> = name.split_whitespace().collect();
result.push_str(&arr[0][..1].to_uppercase());
result.push_str(".");
result.push_str(&arr[1][..1].to_uppercase());
result
}
//大佬的
fn abbrev_name(name: &str) -> String {
name
.split(" ")
.map(|word| word[0..1].to_uppercase())
.collect::<Vec<_>>()
.join(".")
}
//大佬的
fn abbrev_name(name: &str) -> String {
name.split_whitespace().take(2).map(|s| s.chars().nth(0).unwrap().to_uppercase().to_string()).collect::<Vec<_>>().join(".")
}
//这个更是巨佬
fn abbrev_name(name: &str) -> String {
regex::Regex::new(r"^(.)[^ ]* (.).*$").unwrap().replace(name, "$1.$2").to_string().to_uppercase()
}