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中频数并不会输出,显示的全为空值
时间: 2024-03-20 12:44:02 浏览: 127
您提供的代码中,`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` 相等。
相关问题
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` 函数计算字符串中每个字符出现的次数时,需要将输入的字符串转换为双精度数值向量,即 `double` 类型的向量。如果输入的字符串包含中文等非 ASCII 字符,则需要使用 `unicode2native` 函数先将字符串转换为字节流向量,再使用 `histcounts` 函数计算其出现次数。
以下是计算包含中文字符的字符串每个字符出现次数的示例代码:
```
str = '你好,世界!';
bytes = unicode2native(str);
counts = histcounts(bytes, unique(bytes));
disp('字符 频数');
for i = 1:length(unique(bytes))
disp([char(bytes(i)) counts(i)]);
end
```
输出结果为:
```
字符 频数
! 1
, 1
好 1
世 1
你 1
```
在这个例子中,首先使用 `unicode2native` 函数将字符串转换为字节流向量 `bytes`,然后使用 `histcounts` 函数计算每个字节出现的次数,并存储在向量 `counts` 中。最后使用 `char` 函数将每个字节转换为字符,并将它们和对应的出现次数一起输出。
如果您的字符串只包含 ASCII 字符,则可以直接使用 `histcounts` 函数计算出现次数,无需进行类型转换。
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仍然会输出空值
对于给定的字符串`str`,`unique_chars`是该字符串中所有不同字符的数组,`counts`是每个不同字符在字符串中出现的次数。在上述代码中,`counts`数组中的元素都是数字类型,而不是字符类型。因此,`fprintf('%c',counts(i))`会将数字`counts(i)`转换为对应的ASCII字符输出,如果`counts(i)`的值不在ASCII码表中,那么将输出空值。因此,即使`counts(i)`不等于0,但如果其值不在0-127的范围内,那么`fprintf('%c',counts(i))`仍然会输出空值。
阅读全文