matlab代码解决实际问题,包括分支、循环、自定义函数调用
时间: 2023-10-20 12:14:20 浏览: 93
以下是一个示例代码,用于解决一个实际问题:给定一个文本文件,统计其中每个单词出现的次数,并按照出现次数从大到小输出前 N 个单词及其出现次数。
```matlab
function countWords(filename, N)
% countWords 统计文本文件中每个单词出现的次数,并输出前 N 个单词及其出现次数
% countWords(filename, N) 统计文件名为 filename 的文本文件中每个单词出现的次数,并输出前 N 个单词及其出现次数
% 读取文件内容
fid = fopen(filename, 'r');
if fid == -1
error(['无法打开文件 ', filename]);
end
text = fscanf(fid, '%c');
fclose(fid);
% 去除标点符号和空白字符,并转换为小写字母
text = lower(text);
text = regexprep(text, '[^\w\s]+', '');
text = regexprep(text, '\s+', ' ');
% 分割字符串为单词,并统计出现次数
words = strsplit(text);
counts = containers.Map;
for i = 1:length(words)
word = words{i};
if isKey(counts, word)
counts(word) = counts(word) + 1;
else
counts(word) = 1;
end
end
% 按照出现次数从大到小排序,并输出前 N 个单词及其出现次数
counts = cell2mat(values(counts));
[~, idx] = sort(counts, 'descend');
words = keys(counts);
fprintf('出现次数前 %d 的单词及其出现次数:\n', N);
for i = 1:N
fprintf('%s\t%d\n', words{idx(i)}, counts(idx(i)));
end
end
```
该函数采用两个输入参数 `filename` 和 `N`,分别表示要统计的文本文件名和输出的前 N 个单词。函数内部首先使用 `fopen` 函数打开文件,并使用 `fscanf` 函数读取文件内容,并关闭文件。然后使用 `regexprep` 函数去除标点符号和空白字符,并使用 `lower` 函数将所有字母转换为小写。接着使用 `strsplit` 函数将文本分割为单词,并使用 `containers.Map` 对象统计每个单词出现的次数。最后使用 `keys` 和 `values` 函数将单词和对应的出现次数分别存储到 `words` 和 `counts` 变量中,并按照出现次数从大到小排序,并输出前 N 个单词及其出现次数。
使用该函数的示例代码如下:
```matlab
filename = 'test.txt';
N = 10;
countWords(filename, N);
```
该代码定义了一个文件名 `filename` 和一个输出的前 N 个单词数 `N`,并调用函数 `countWords` 统计文本文件中每个单词出现的次数,并输出前 N 个单词及其出现次数。
阅读全文