Rust学习---示例2

该文介绍了如何在Rust中编写一个函数,该函数接收两个由空格分隔的单词,然后返回这两个单词首字母的大写形式,中间用点号分隔。文中提供了多种解决方案,包括官方解答和社区贡献的高效实现,并通过测试用例验证了函数的正确性。
摘要由CSDN通过智能技术生成

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()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值