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: HashMapString, 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✅ 分析完成); }

相关新闻

MOSFET 关断过冲与振铃分析:从 5 个寄生参数到 PCB 布局优化

MOSFET 关断过冲与振铃分析:从 5 个寄生参数到 PCB 布局优化

MOSFET 关断过冲与振铃分析:从 5 个寄生参数到 PCB 布局优化 1. 问题现象与工程危害 当 MOSFET 快速关断时,工程师们常会观察到两种典型现象: 电压过冲 (Vds 尖峰)和 振铃 (阻尼振荡)。以某…

2026/7/10 1:20:09阅读更多 →
小米Pad 5 Windows驱动终极指南:3步将安卓平板变身高性能Windows设备

小米Pad 5 Windows驱动终极指南:3步将安卓平板变身高性能Windows设备

小米Pad 5 Windows驱动终极指南:3步将安卓平板变身高性能Windows设备 【免费下载链接】MiPad5-Drivers https://github.com/Project-Aloha/windows_oem_xiaomi_nabu 项目地址: https://gitcode.com/gh_mirrors/mi/MiPad5-Drivers 你是否想让闲置的小米Pad 5重…

2026/7/10 1:20:09阅读更多 →
STM32F042K6与A3910电机驱动开发实战指南

STM32F042K6与A3910电机驱动开发实战指南

1. 项目背景与硬件选型解析在嵌入式开发领域,如何选择合适的微控制器和驱动芯片组合往往决定了项目的成败。这次我选择了STM32F042K6作为主控芯片,搭配A3910电机驱动器的方案,这套组合拳能覆盖从简单逻辑控制到复杂电机驱动的广泛需求。STM32…

2026/7/10 1:20:09阅读更多 →
受欢迎的西宁茂枫商混站

受欢迎的西宁茂枫商混站

在西宁及青海周边建筑工程领域,西宁商砼市场竞争日趋激烈,而青海茂枫建筑劳务有限公司旗下的“茂枫商混站”凭借差异化优势迅速成为行业焦点。其受欢迎的背后,是对高原施工痛点的精准破解与全链条服务能力的深度沉淀。 一、产能储备与供应稳…

2026/7/10 2:35:54阅读更多 →
2026五大AI编程助手实战选型指南:Cursor/Copilot/Windsurf/Amazon Q/Claude Code深度对比

2026五大AI编程助手实战选型指南:Cursor/Copilot/Windsurf/Amazon Q/Claude Code深度对比

1. 这不是又一篇“AI编程助手排行榜”,而是一份真实开发者用三个月高强度混搭、切换、压测后写下的生存指南 你点开这篇内容,大概率正面临一个现实困境:手头有十几个未关闭的IDE标签页,其中三个是不同项目的代码编辑器&#xff0c…

2026/7/10 2:35:54阅读更多 →
Claude Code上下文满了怎么办?compact、clear和resume怎么用

Claude Code上下文满了怎么办?compact、clear和resume怎么用

摘要 Claude Code使用时间越长,读取的代码、命令输出和对话记录越多,上下文就越容易接近上限。本文介绍/compact、/clear和/resume三个常用命令的区别,并给出不同开发场景下的使用方法。 ChatGPTplus/pro一键订阅入口! 使用Cla…

2026/7/10 2:35:54阅读更多 →
揭秘GitHub Copilot的gpt-5.4:不是新模型,而是128K context的工程优化

揭秘GitHub Copilot的gpt-5.4:不是新模型,而是128K context的工程优化

1. 先说结论:根本不存在“GPT-5.4”这个模型,所谓“1M context”是误传与混淆的混合体你点开 GitHub Copilot 的设置界面,看到下拉菜单里赫然写着gpt-5.4—— 这个名字太有迷惑性了:带“GPT”前缀、数字版本号精确到小数点后一位、…

2026/7/10 2:35:54阅读更多 →
DBAKIT 数据库智能运维平台 v1.0 正式发布

DBAKIT 数据库智能运维平台 v1.0 正式发布

🚀 DBAKIT 数据库智能运维平台 v1.0 正式发布。 🎯 聚焦数据库日常运维场景。 🧩 一站式集成七大模块|20 个核心功能。 📊 覆盖监控、分析、巡检、备份、部署、故障处理等高频工作。 ⚙️ 让数据库运维更智能、更高效、…

2026/7/10 2:35:54阅读更多 →
OpenClaw:轻量级本地智能体框架,支持跨平台AI工具编排

OpenClaw:轻量级本地智能体框架,支持跨平台AI工具编排

1. OpenClaw 是什么?它不是另一个“Claude 模仿者”,而是一套可落地的本地化智能体协作框架 OpenClaw 这个名字最近在开发者圈子里冒得很快,尤其在 Mac 和 Windows 用户搜索“claude code 本地部署”“codex mac intel”“dify 本地部署教程…

2026/7/10 2:30:54阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/9 5:56:19阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/9 9:45:20阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比

浏览器缓存行为深度解析:Chrome/Firefox/Safari 对 304 响应的 5 种触发场景对比当你在浏览器地址栏敲入一个网址时,背后可能隐藏着一场关于"要不要重新下载资源"的精密博弈。这场博弈的裁判是HTTP缓存机制,而304状态码则是这场博弈…

2026/7/10 0:00:01阅读更多 →
RoboWits:面向创造性问题求解的双臂机器人认知推理基准

RoboWits:面向创造性问题求解的双臂机器人认知推理基准

1. 项目概述:这不是又一个机器人抓取数据集,而是一次对“思考力”的压力测试 RoboWits——这个名字里藏着两个关键信号:“Robo”直指物理世界中的具身智能体,“Wits”则毫不掩饰地指向人类最核心的认知能力:机敏、判断…

2026/7/10 0:00:01阅读更多 →
5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能

5分钟完全指南:如何使用TegraRcmGUI图形化工具解锁Switch无限可能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI TegraRcmGUI是一款专为Windows…

2026/7/10 0:00:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/9 9:45:20阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/9 15:50:44阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/9 14:14:17阅读更多 →