passwords=fileread('pswd.txt'); passwords1=regexp(passwords,'[\s,.?:;!-]+','split'); passwords1=lower(passwords1); % 统计密码出现次数 m = containers.Map('KeyType','char','ValueType','any'); for i = 1:length(passwords1) if m.isKey(passwords1{i}) m(passwords1{i}) = m(passwords1{i}) + 1; else m(passwords1{i}) = 1; end end % 对密码出现次数进行排序 v=m.values'; k=m.keys'; kv=sortrows([k,v],2,'descend'); disp('前五十个常用密码及其出现次数:'); kv(1:10,:) % 绘制前十个常用密码的条形图 figure; bar(1:min(10, length(sortedCounts)), sortedCounts(1:min(10, length(sortedCounts)))); xticks(1:min(10, length(sortedCounts))); xticklabels(sortedPasswords(1:min(10, length(sortedCounts)))); xlabel('密码'); ylabel('出现次数'); title(sprintf('前十个常用密码(%s)', [datestr(now) '林浩晟 2022280310']));
时间: 2023-12-04 14:01:53 浏览: 122
这段代码可以从一个密码文件中读取密码,并统计每个密码出现的次数,然后对密码出现次数进行排序,并绘制前十个常用密码的条形图。其中,`pswd.txt`是你的密码文件名,可以根据需要进行修改。
需要注意的是,这段代码使用了MATLAB中的`containers.Map`容器来实现对密码出现次数的统计,因此需要确保你的MATLAB版本支持该容器类型。
另外,这段代码中绘制条形图的部分存在一些问题,需要将`sortedCounts`和`sortedPasswords`改为`kv(:,2)`和`kv(:,1)`,并在`xticklabels`函数中添加`'Rotation',45`参数以避免标签重叠。
完整代码示例:
```
passwords = fileread('pswd.txt');
passwords1 = regexp(passwords, '[\s,.?:;!-]+', 'split');
passwords1 = lower(passwords1);
% 统计密码出现次数
m = containers.Map('KeyType', 'char', 'ValueType', 'any');
for i = 1:length(passwords1)
if m.isKey(passwords1{i})
m(passwords1{i}) = m(passwords1{i}) + 1;
else
m(passwords1{i}) = 1;
end
end
% 对密码出现次数进行排序
v = m.values';
k = m.keys';
kv = sortrows([k, v], 2, 'descend');
% 显示前十个常用密码及其出现次数
disp('前十个常用密码及其出现次数:');
disp(kv(1:10,:));
% 绘制前十个常用密码的条形图
figure;
sortedCounts = cell2mat(kv(:,2));
sortedPasswords = kv(:,1);
bar(1:min(10, length(sortedCounts)), sortedCounts(1:min(10, length(sortedCounts))));
xticks(1:min(10, length(sortedCounts)));
xticklabels(sortedPasswords(1:min(10, length(sortedCounts))));
xtickangle(45);
xlabel('密码');
ylabel('出现次数');
title(sprintf('前十个常用密码(%s)', [datestr(now) '林浩晟 2022280310']));
```
阅读全文