在学习编程语言的过程中,实现一个简单的计算器是检验你对基本语法、数据结构和逻辑控制掌握程度的好方法。今天,我们将使用 Rust 语言从零开始构建一个 栈式计算器。无论你是 Rust 新手还是刚接触编程的小白,这篇教程都将一步步带你完成整个过程。
栈式计算器是一种基于“后进先出”(LIFO)原则工作的计算器。它通常使用逆波兰表示法(Reverse Polish Notation, RPN),也叫后缀表达式。例如,常规中缀表达式 3 + 4 在 RPN 中写作 3 4 +。
Rust 是一门内存安全、高性能的系统级编程语言。它通过所有权机制避免了常见的内存错误,同时提供了强大的标准库支持。使用 Rust 实现 Rust栈式计算器 不仅能加深你对栈这一数据结构的理解,还能让你熟悉 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
Vec 作为栈结构(push/pop)Result<T, E> 进行健壮的错误处理split_whitespace() 和 parse())match)简化分支逻辑恭喜你!你已经成功用 Rust 实现了一个功能完整的栈式计算器。这个小项目不仅涵盖了 Rust编程入门 的核心概念,还展示了如何用 Rust数据结构教程 中学到的知识解决实际问题。你可以在此基础上扩展功能,比如支持更多运算符、括号处理(需转换为 RPN)或图形界面。
希望这篇 Rust实现计算器 教程对你有帮助。继续编码,享受 Rust 带来的安全与性能吧!
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251211838.html