当前位置:首页 > Rust > 正文

用Rust手把手实现栈式计算器(零基础也能学会的Rust编程实战)

在学习编程语言的过程中,实现一个简单的计算器是检验你对基本语法、数据结构和逻辑控制掌握程度的好方法。今天,我们将使用 Rust 语言从零开始构建一个 栈式计算器。无论你是 Rust 新手还是刚接触编程的小白,这篇教程都将一步步带你完成整个过程。

什么是栈式计算器?

栈式计算器是一种基于“后进先出”(LIFO)原则工作的计算器。它通常使用逆波兰表示法(Reverse Polish Notation, RPN),也叫后缀表达式。例如,常规中缀表达式 3 + 4 在 RPN 中写作 3 4 +

用Rust手把手实现栈式计算器(零基础也能学会的Rust编程实战) Rust栈式计算器 Rust实现计算器 Rust数据结构教程 Rust编程入门 第1张

为什么选择 Rust 实现?

Rust 是一门内存安全、高性能的系统级编程语言。它通过所有权机制避免了常见的内存错误,同时提供了强大的标准库支持。使用 Rust 实现 Rust栈式计算器 不仅能加深你对栈这一数据结构的理解,还能让你熟悉 Rust 的基本语法和错误处理机制。

项目目标

  • 接收用户输入的 RPN 表达式(如:"5 1 2 + 4 * + 3 -")
  • 使用栈来解析并计算结果
  • 处理基本四则运算:+、-、*、/
  • 提供清晰的错误提示(如除零、无效输入等)

第一步:创建 Rust 项目

打开终端,运行以下命令:

cargo new rpn_calculatorcd rpn_calculator  

第二步:编写核心逻辑

打开 src/main.rs 文件,我们将在这里编写完整的计算器代码。

use std::io;fn main() {    println!("欢迎使用 Rust 栈式计算器!");    println!("请输入一个 RPN 表达式(例如:5 1 2 + 4 * + 3 -):");    let mut input = String::new();    io::stdin()        .read_line(&mut input)        .expect("读取输入失败");    match evaluate_rpn(&input) {        Ok(result) => println!("结果是: {}", result),        Err(e) => eprintln!("错误: {}", e),    }}fn evaluate_rpn(expr: &str) -> Result<f64, String> {    let mut stack: Vec<f64> = Vec::new();    for token in expr.trim().split_whitespace() {        if let Ok(num) = token.parse::<f64>() {            stack.push(num);        } else {            match token {                "+" => {                    let b = stack.pop().ok_or("操作数不足".to_string())?;                    let a = stack.pop().ok_or("操作数不足".to_string())?;                    stack.push(a + b);                }                "-" => {                    let b = stack.pop().ok_or("操作数不足".to_string())?;                    let a = stack.pop().ok_or("操作数不足".to_string())?;                    stack.push(a - b);                }                "*" => {                    let b = stack.pop().ok_or("操作数不足".to_string())?;                    let a = stack.pop().ok_or("操作数不足".to_string())?;                    stack.push(a * b);                }                "/" => {                    let b = stack.pop().ok_or("操作数不足".to_string())?;                    if b == 0.0 {                        return Err("除数不能为零".to_string());                    }                    let a = stack.pop().ok_or("操作数不足".to_string())?;                    stack.push(a / b);                }                _ => return Err(format!("未知操作符: {}", token)),            }        }    }    if stack.len() != 1 {        return Err("表达式格式错误".to_string());    }    Ok(stack[0])}  

第三步:测试你的计算器

在终端运行:

cargo run  

然后输入表达式,比如:

5 1 2 + 4 * + 3 -  

程序将输出:结果是: 14

关键知识点回顾

  • Rust栈式计算器 使用 Vec 作为栈结构(push/pop)
  • 利用 Result<T, E> 进行健壮的错误处理
  • 字符串分割与数字解析(split_whitespace()parse()
  • 模式匹配(match)简化分支逻辑

结语

恭喜你!你已经成功用 Rust 实现了一个功能完整的栈式计算器。这个小项目不仅涵盖了 Rust编程入门 的核心概念,还展示了如何用 Rust数据结构教程 中学到的知识解决实际问题。你可以在此基础上扩展功能,比如支持更多运算符、括号处理(需转换为 RPN)或图形界面。

希望这篇 Rust实现计算器 教程对你有帮助。继续编码,享受 Rust 带来的安全与性能吧!