当前位置:网站首页>rust统计文件中单词出现的次数
rust统计文件中单词出现的次数
2022-07-05 18:12:00 【pilaf1990】
说明
该例子来源于《精通Rust 第2版》 [印]拉胡尔·沙玛 [芬]韦萨·凯拉维塔 著 邓世超 译 36页。但是可能是rust语言在变化的原因,在笔者rust版本是rustc 1.61.0 (fe5b13d68 2022-05-18)
的环境中编译都报错,经过修改部分代码可以运行了。下面是修改后的代码:
代码
use std::collections::HashMap;
use std::env;
use std::fs::File;
use std::io::prelude::BufRead;
use std::io::BufReader;
// 定义一个Tuple Struct(元组结构体,元组结构体的特点是字段只有类型,没有名称)
#[derive(Debug)]
struct WordCounter(HashMap<String,u64>);
impl WordCounter{
fn new() -> WordCounter{
// 创建元组结构体WordCounter的实例,元组的第一个元素是HashMap类型实例
WordCounter(HashMap::new())
}
// &mut self作为第一个参数,则此方法提供对类型实例的可变访问
fn increment(&mut self, word:&str){
let key = word.to_string();
// self.0表示获取元组结构体WordCounter的第一个元素,即HashMap的实例
let count = self.0.entry(key).or_insert(0);
// 单词次数加1
*count += 1;
}
fn display(self){
for (key,value) in self.0.iter() {
println!("单词:{}出现了{}次", key, value);
}
}
}
fn main() {
let arguments: Vec<String> = env::args().collect();
// 这儿要用&arguments
let filename = &arguments[1];
println!("Processing file:{}",filename);
let file = File::open(filename).expect("Could not open file");
let reader = BufReader::new(file);
let mut word_counter = WordCounter::new();
for line in reader.lines() {
let line = line.expect("Could not read line");
// 每一行文本按照空格分割
let words = line.split(" ");
for word in words {
if word == ""{
continue
} else {
word_counter.increment(word);
}
}
}
word_counter.display();
}
运行效果
边栏推荐
- 深拷贝与浅拷贝【面试题3】
- 使用Jmeter虚拟化table失败
- Maximum artificial island [how to make all nodes of a connected component record the total number of nodes? + number the connected component]
- LeetCode笔记:Weekly Contest 300
- Electron安装问题
- RSE2020/云检测:基于弱监督深度学习的高分辨率遥感图像精确云检测
- 通过SOCKS代理渗透整个内网
- Whether to take a duplicate subset with duplicate elements [how to take a subset? How to remove duplicates?]
- 在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?
- Introduction to VC programming on "suggestions collection"
猜你喜欢
node_exporter内存使用率不显示
南京大学:新时代数字化人才培养方案探讨
Copy the linked list with random pointer in the "Li Kou brush question plan"
吳恩達團隊2022機器學習課程,來啦
Tupu software digital twin | visual management system based on BIM Technology
记一次使用Windbg分析内存“泄漏”的案例
寻找第k小元素 前k小元素 select_k
使用JMeter录制脚本并调试
Daily exercise: a series of dates
Leetcode exercise - 206 Reverse linked list
随机推荐
Gimp 2.10 tutorial "suggestions collection"
[paddleclas] common commands
ISPRS2022/雲檢測:Cloud detection with boundary nets基於邊界網的雲檢測
Electron安装问题
小林coding的内存管理章节
OpenShift常用管理命令杂记
Let more young people from Hong Kong and Macao know about Nansha's characteristic cultural and creative products! "Nansha kylin" officially appeared
Cmake tutorial step1 (basic starting point)
瀚升优品app翰林优商系统开发功能介绍
开户复杂吗?网上开户安全么?
《力扣刷题计划》复制带随机指针的链表
最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
Le cours d'apprentissage de la machine 2022 de l'équipe Wunda arrive.
记录Pytorch中的eval()和no_grad()
ClickHouse(03)ClickHouse怎么安装和部署
vulnhub之darkhole_2
Access the database and use redis as the cache of MySQL (a combination of redis and MySQL)
Career advancement Guide: recommended books for people in big factories
Introduction to VC programming on "suggestions collection"
Simulate the hundred prisoner problem