news 2026/7/10 1:25:15

rust示例2-单词统计工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rust示例2-单词统计工具
// ============================================ // 案例 8.5:实战——单词统计工具 // 功能:统计用户输入文本中的单词出现次数 // 知识点:HashMap entry API、字符串处理、用户输入、字符过滤、迭代器排序 // 输入:多行英文文本,输入空行结束录入 // 输出:总单词数量、去重单词总数、Top10高频单词 // ============================================ // 导入哈希表集合,用于存储「单词-出现次数」键值对 use std::collections::HashMap; // 导入标准输入输出库,读取控制台用户输入 use std::io; fn main() { // 打印程序标题分隔线 println!("========================================"); println!(" 📊 单词统计工具"); println!("========================================"); println!("请输入一段英文文本(输入空行结束):"); // 可变字符串,拼接用户输入的所有文本行 let mut text = String::new(); // 循环读取多行输入,直到用户输入空行退出录入 loop { // 临时存储单行输入 let mut line = String::new(); // 读取一行控制台输入,失败直接panic提示读取失败 io::stdin().read_line(&mut line).expect("读取失败"); // 去除该行首尾空格、换行符,得到清洗后的行引用 let line = line.trim(); // 输入为空行,终止多行输入循环 if line.is_empty() { break; } // 将当前有效行追加到总文本 text.push_str(line); // 追加空格,分隔上下两行的单词,避免跨行单词粘连 text.push(' '); } // 判断用户是否完全没有输入内容,直接结束程序 if text.is_empty() { println!("⚠️ 未输入任何文本!"); return; } // ---------------------- 单词统计核心逻辑 ---------------------- // 定义哈希表:key=小写单词,value=单词出现次数 let mut word_count: HashMap<String, u32> = HashMap::new(); // 以任意空白(空格/制表符)分割全部文本,遍历每一个原始单词 for word in text.split_whitespace() { // 字符过滤:只保留字母与连字符,过滤逗号、句号、感叹号等标点 let clean_word: String = word .chars() // 将单词转为字符迭代器 .filter(|c| c.is_alphabetic() || *c == '-') // 过滤规则:仅字母、短横线保留 .collect(); // 将过滤后的字符重新拼接为字符串 // 过滤完全由标点组成、清洗后为空的无效片段 if !clean_word.is_empty() { // HashMap entry API:查询单词,不存在则插入初始值0,返回次数的可变引用 let count = word_count.entry(clean_word.to_lowercase()).or_insert(0); // 次数自增1 *count += 1; } } // ---------------------- 输出统计结果 ---------------------- println!("\n========================================"); println!(" 📊 统计结果"); println!("========================================"); // 原始总单词数量(未去重,含带标点原始单词) println!("总单词数: {}", text.split_whitespace().count()); // 去重后单词总数量(清洗、统一小写后的有效单词) println!("不重复单词: {}", word_count.len()); println!("\n【单词频率】"); // 将HashMap迭代器转为可排序向量:元素是(&单词引用, &次数引用) let mut sorted: Vec<(&String, &u32)> = word_count.iter().collect(); // 按单词出现次数降序排序,次数相同则顺序随机 sorted.sort_by(|a, b| b.1.cmp(a.1)); // 只打印前10个高频单词 for (word, count) in sorted.iter().take(10) { println!(" {}: {}", word, count); } // 如果去重单词超过10个,打印省略提示与总数量 if sorted.len() > 10 { println!(" ... (共 {} 个单词)", sorted.len()); } println!("\n✅ 分析完成!"); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 1:24:40

HiFive1 RevB J-Link-OB 驱动安装 3 步排错:从设备管理器到 PlatformIO 调试

HiFive1 RevB J-Link-OB 驱动安装全流程排错指南1. 问题定位与初步排查当HiFive1 RevB开发板通过USB连接电脑后&#xff0c;设备管理器出现未知设备或端口未识别时&#xff0c;我们需要建立系统化的排查流程。首先观察设备管理器中的具体状态&#xff0c;这将成为后续操作的决策…

作者头像 李华
网站建设 2026/7/10 1:24:03

【办公应用3】基于 Word 书签 + Excel 数据源批量生成文档工具

实战&#xff1a;基于 Word 书签 Excel 数据源批量生成文档工具 若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://zcmxbwcx.blog.csdn.net/article/details/162740041 一、项目背景 在工作中&#xff0c;经常会遇到Excel表记录的信息需…

作者头像 李华
网站建设 2026/7/10 1:23:47

江科大OLED驱动改造:为STM32桌宠添加6种动态表情的显示方案

江科大OLED驱动改造&#xff1a;为STM32桌宠添加6种动态表情的显示方案在嵌入式开发领域&#xff0c;人机交互的视觉表现往往决定了产品的用户体验。对于STM32开发者而言&#xff0c;江科大标准OLED驱动库因其简洁高效而广受欢迎。本文将深入探讨如何基于这一经典驱动库&#x…

作者头像 李华
网站建设 2026/7/10 1:23:36

PostgreSQL开了 Memoize 就万事大吉?我被它坑了四次

注&#xff1a;本文为安丫科技刘峰原创。 转载请注明出处&#xff0c;严禁抄袭。 ⚠️ 风险提示&#xff1a; 文中代码仅供测试环境学习。 生产环境复杂&#xff0c;严禁盲目套用&#xff0c;后果自负。 如遇紧急故障或需兜底支持&#xff0c;请联系安丫专家团队。 导****…

作者头像 李华
网站建设 2026/7/10 1:21:12

六十四卦编码方案:从二进制到 Unicode,不同的表达不同的代价

六十四卦编码方案&#xff1a;从二进制到 Unicode&#xff0c;不同的表达不同的代价 一、同一个卦象&#xff0c;四种编码方式占用的内存差 100 倍 在做一个传统文化数据项目时&#xff0c;遇到了一个最基本但却被忽略的问题&#xff1a;怎么在计算机中表示一个卦&#xff1f…

作者头像 李华