当前位置:网站首页>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();
}
运行效果

边栏推荐
- Generate classes from XML schema
- 图像分类,看我就够啦!
- ConvMAE(2022-05)
- "Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications
- 【pm2详解】
- 访问数据库使用redis作为mysql的缓存(redis和mysql结合)
- 最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
- Tupu software digital twin | visual management system based on BIM Technology
- Eliminate the writing of 'if () else{}'
- Introduction to VC programming on "suggestions collection"
猜你喜欢

第十一届中国云计算标准和应用大会 | 云计算国家标准及白皮书系列发布 华云数据全面参与编制

Sophon base 3.1 launched mlops function to provide wings for the operation of enterprise AI capabilities

Thoroughly understand why network i/o is blocked?

Simulate the hundred prisoner problem

FCN: Fully Convolutional Networks for Semantic Segmentation

Let more young people from Hong Kong and Macao know about Nansha's characteristic cultural and creative products! "Nansha kylin" officially appeared

"Xiaodeng in operation and maintenance" is a single sign on solution for cloud applications

Fix vulnerability - mysql, ES

使用Jmeter虚拟化table失败

Sophon KG升级3.1:打破数据间壁垒,解放企业生产力
随机推荐
[performance test] full link voltage test
让更多港澳青年了解南沙特色文创产品!“南沙麒麟”正式亮相
Penetrate the whole intranet through socks agent
Sophon CE社区版上线,免费Get轻量易用、高效智能的数据分析工具
Star ring technology data security management platform defender heavy release
【在優麒麟上使用Electron開發桌面應】
隐私计算助力数据的安全流通与共享
Binder开辟线程数过多导致主线程ANR异常
[utiliser Electron pour développer le Bureau sur youkirin devrait]
matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图
Elk log analysis system
兄弟组件进行传值(显示有先后顺序)
修复漏洞 - mysql 、es
Crontab 日志:如何记录我的 Cron 脚本的输出
Logical words in Articles
Introduction to the development function of Hanlin Youshang system of Hansheng Youpin app
苹果手机炒股安全吗?打新债是骗局吗?
rsync
图扑软件数字孪生 | 基于 BIM 技术的可视化管理系统
[TestLink] testlink1.9.18 solutions to common problems