美文网首页Rust语言编程实例100题
Rust语言编程实例100题-004

Rust语言编程实例100题-004

作者: L我是小学生 | 来源:发表于2021-06-14 08:22 被阅读0次

    Rust语言编程实例100题-004

    题目:输入某年某月某日,判断这一天是这一年的第几天?

    程序分析:以4月8日为例,应该先把前三个月的加起来,然后再加上8天即本年的第几天,如果遇到特殊情况,闰年且输入月份大于等于3时需考虑多加一天。下面的解法仅仅是为了练习知识点而得出的参考答案,当然还有其它的解答方法。大家也可以试一下。

    知识点:错误校验,条件判断,字符串分割,动态数组

    fn main() {
        println!("请输入年月日,年月日中间用空格隔开:");
    
        // 获取输入数据
        let mut input_text = String::new();
        std::io::stdin().read_line(&mut input_text).expect("failed read_line error!");
    
        let string_vec: Vec<&str> = input_text.trim().split_whitespace().collect();
    
        // 校验输入数据
        if string_vec.len() != 3 {
            println!("输入格式错误!请输入年 月 日,中间使用空格隔开!");
            return;
        }
        // 声明变量
        // 年
        let year_str = string_vec[0];
        let year;
        // 月
        let month_str = string_vec[1];
        let month;
        // 日
        let day_str = string_vec[2];
    
        // 校验年份
        match year_str.parse::<u32>() {
            Ok(i) => {
                year = i;
            }
            Err(_) => {
                println!("您输入的年份 {} 格式错误!", year_str);
                return;
            }
        }
    
        // 校验月份
        match month_str.parse::<u32>() {
            Ok(i) => {
                if i < 1 || i > 12 {
                    println!("您输入的月份 {} 格式错误!", month_str);
                    return;
                } else {
                    month = i;
                }
            }
            Err(_) => {
                println!("您输入的月份 {} 格式错误!", month_str);
                return;
            }
        }
    
        // 校验日期
        match day_str.parse::<u32>() {
            Ok(day) => {
                // 日期小于1天直接返回
                if day < 1 {
                    println!("您输入的日期 {} 格式错误!", day_str);
                    return;
                }
    
                // 各月份的天数
                let mut month_days_vector = vec![31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    
                // 判断是闰年
                if year % 400 == 0 || (year % 4 == 0 && year % 100 != 0) {
                    // year是闰年
                    // 修改2月份天数
                    month_days_vector[1] = 29;
                }
    
                // 当前输入的天数 大于月份原有的天数,则提示错误!
                let current_month_days = month_days_vector[(month - 1) as usize];
                if day > current_month_days {
                    println!("您输入的日期 {} 格式错误!{} 年 {} 月的日期天数不得超过{}天!!", day_str, year, month, current_month_days);
                    return;
                } else {
                    // 计算总天数
                    // 前month - 1的月份天数 + 当前的日期 i
                    let mut count: u32 = 0;
                    for item in 1..month {
                        count += month_days_vector[(item - 1) as usize];
                    }
                    count += day;
                    print!("{}年{}月{}日 是 {} 年的第 {} 天", year, month, day, year, count);
                }
            }
            Err(_) => {
                println!("您输入的日期 {} 格式错误!", day_str);
            }
        }
    }
    
    

    程序执行结果

    请输入年月日,年月日中间用空格隔开:
    2056 12 31
    2056年12月31日 是 2056 年的第 366 天
    
    Process finished with exit code 0
    

    相关文章

      网友评论

        本文标题:Rust语言编程实例100题-004

        本文链接:https://www.haomeiwen.com/subject/fymneltx.html