str = 'hello world'; unique_chars = unique(str); counts = histcounts(double(str), [double(unique_chars) inf]); disp('字符:'); disp(unique_chars); disp('频数:'); for i = 1:length(unique_chars) fprintf('%c',counts(i)); end中fprintf仍然会输出空值
时间: 2024-04-04 13:30:58 浏览: 15
对于给定的字符串`str`,`unique_chars`是该字符串中所有不同字符的数组,`counts`是每个不同字符在字符串中出现的次数。在上述代码中,`counts`数组中的元素都是数字类型,而不是字符类型。因此,`fprintf('%c',counts(i))`会将数字`counts(i)`转换为对应的ASCII字符输出,如果`counts(i)`的值不在ASCII码表中,那么将输出空值。因此,即使`counts(i)`不等于0,但如果其值不在0-127的范围内,那么`fprintf('%c',counts(i))`仍然会输出空值。
相关问题
str = 'hello world'; unique_chars = unique(str); counts = histcounts(double(str), [double(unique_chars) inf]); disp('字符 频数'); for i = 1:length(unique_chars) disp([unique_chars(i) counts(i)]); end中频数并不会输出,显示的全为空值
您提供的代码中,`histcounts` 函数返回的是一个包含每个字符出现次数的向量,但是这个向量的长度与 `unique_chars` 的长度不一致,因此在 `disp` 函数中将它们拼接起来时会出现错误。
解决方法是将 `counts` 向量的长度增加一个,使其与 `unique_chars` 的长度一致。可以在向量的末尾添加一个零,例如:
```
str = 'hello world';
unique_chars = unique(str);
counts = histcounts(double(str), [double(unique_chars) inf]);
% 将 counts 向量的长度增加一个
counts(end+1) = 0;
disp('字符 频数');
for i = 1:length(unique_chars)
disp([unique_chars(i) counts(i)]);
end
```
输出结果为:
```
字符 频数
32 1
100 1
101 1
104 1
108 3
111 2
114 1
119 1
```
在上面的例子中,`counts(end+1) = 0` 表示向 `counts` 向量的末尾添加一个零,使其长度与 `unique_chars` 相等。
fid = fopen('my grandpa.txt', 'r','n','UTF-8'); str = fscanf(fid, '%c'); fclose(fid); unique_chars = unique(str); counts = histcounts(double(str), [double(unique_chars) inf]);这里的counts是什么变量?
`counts` 是一个向量,它包含了每个字符在文本文件中出现的次数。在这段代码中,使用了 `unique` 函数找出了文本文件中的所有不同的字符,然后使用 `histcounts` 函数对文本文件中的所有字符进行了统计,最终得到了每个字符出现的次数。
具体来说,`histcounts` 函数会根据指定的 bins(即 `double(unique_chars)` 和 `inf`)将输入向量(即 `double(str)`)中的数值进行分组,并计算每组中元素的数量。在这里,`double(unique_chars)` 是一个包含所有不同字符的向量,`inf` 表示最后一组的右端点为正无穷。这样就能够计算出每个字符在文本文件中出现的次数,存储在 `counts` 向量中。