【不定期更新】一些简单的Rust程序

1. Hello, world!
fn main() {
    println!("Hello, world!");
}
2. 输入姓名并问候
use std::io::{Write, stdin, stdout};

fn main() {
    let mut s = String::new();

    print!("What is your name? ");

    if let Err(e) = stdout().flush().and(stdin().read_line(&mut s)) {
        panic!("{}", e);
    }

    match s.trim() {
        n if n.is_empty() => println!("No name entered."),
        n => println!("Hello, {}!", n),
    }
}
3. 生成随机数
extern "C" {
    fn rand() -> i32;
    fn srand(seed: u32);
    fn time(arg: *mut isize) -> isize;
}

fn main() {
    let mut v = vec![0; 20];

    unsafe {
        srand(time(0 as _) as _);
    }

    for x in &mut v {
        *x = unsafe { rand() } % 90 + 10;
    }
    v.sort();
    println!("{:?}", v);

    v.retain(|&x| x >= 50);
    println!("{:?}", v);
}
4. 输出美国部分城市及其所在州
macro_rules! hash_map {
    ($($k:expr => $v:expr),*) => ({
        let mut m = ::std::collections::hash_map::HashMap::new();
        $(m.insert($k, $v);)*
        m
    })
}

fn main() {
    let mut map = hash_map!["Seattle" => "California",
                            "Chicago" => "Illinois",
                            "New York" => "New York",
                            "Miami" => "Florida"];

    if let Some(state) = map.get_mut("Seattle") {
        *state = "Washington";
    }
    map.remove("New York");

    for (city, state) in &map {
        println!("{} => {}", city, state);
    }

    println!("Length = {}", map.len());
}
5. 包装 VecDeque<T>实现栈(Stack<T>)数据结构
use std::collections::VecDeque;
use std::fmt::{self, Debug, Formatter};

#[derive(Clone, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct Stack<T> {
    vec_deque: VecDeque<T>,
}

impl<T> Stack<T> {
    #[inline]
    pub fn new() -> Stack<T> {
        Stack { vec_deque: VecDeque::new() }
    }

    #[inline]
    pub fn len(&self) -> usize {
        self.vec_deque.len()
    }

    #[inline]
    pub fn is_empty(&self) -> bool {
        self.vec_deque.is_empty()
    }

    #[inline]
    pub fn top(&self) -> Option<&T> {
        self.vec_deque.back()
    }

    #[inline]
    pub fn top_mut(&mut self) -> Option<&mut T> {
        self.vec_deque.back_mut()
    }

    #[inline]
    pub fn pop(&mut self) -> Option<T> {
        self.vec_deque.pop_back()
    }

    #[inline]
    pub fn push(&mut self, value: T) {
        self.vec_deque.push_back(value);
    }

    #[inline]
    pub fn vec_deque(&self) -> &VecDeque<T> {
        &self.vec_deque
    }

    #[inline]
    pub fn vec_deque_mut(&mut self) -> &mut VecDeque<T> {
        &mut self.vec_deque
    }
}

impl<T: Debug> Debug for Stack<T> {
    #[inline]
    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        (&self.vec_deque as &Debug).fmt(f)
    }
}

impl<T> From<VecDeque<T>> for Stack<T> {
    #[inline]
    fn from(other: VecDeque<T>) -> Stack<T> {
        Stack { vec_deque: other }
    }
}

fn main() {
    let mut s = Stack::new();

    s.push("Hello");
    s.push("world!");
    s.push("CHAOS");

    println!("{:?}", s);
    println!("{}", s.len());

    while !s.is_empty() {
        if let Some(x) = s.pop() {
            println!("Popped: {}", x);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值