MATLAB函数中字符串数组转ASCII数组计算哈希遇问题求助
解决MATLAB哈希函数兼容字符串数组的问题
你的核心问题是调用double(array1)后没有将转换结果赋值给变量,导致后续循环仍使用原数组,自然无法生效。完全可以在函数内部完成转换,不需要提前处理输入,修改方案如下:
关键修正点
- 对字符/字符串数组执行
double()转换后,必须将结果赋值给变量(比如arr = double(array1);),后续循环基于这个转换后的数值数组计算哈希。 - 区分MATLAB中的字符数组(单引号包裹,如
'abc')和字符串数组(双引号包裹,如["a","b"]):前者直接用double()就能得到每个字符的ASCII值;后者需要先转换为字符数组再处理,或者用double(string_array)也能直接得到对应ASCII值(MATLAB R2016b及以上支持)。
修改后的完整函数
function [h] = converter(array1) % 统一转换为ASCII数值数组 if isstring(array1) % 处理字符串数组:先转为字符数组再转ASCII arr = double(char(array1)); else % 处理字符数组或数值数组 arr = double(array1); end h = 0; n = length(arr); for i = 1:n h = arr(i) + 31 * h; end end
代码说明
- 类型判断与转换:用
isstring()判断输入是否为字符串数组,若是则先转成字符数组再转ASCII;字符数组和数值数组直接用double()转换即可。 - 循环计算哈希:基于转换后的数值数组
arr进行循环,确保无论输入是数值、字符还是字符串数组,都能正确计算哈希值。 - 简化代码:去掉了冗余的
i=1初始化,MATLAB的for循环会自动初始化循环变量。
测试示例
- 输入数值数组:
converter([1,2,3])→ 计算得哈希值1+31*(2+31*3)=2984 - 输入字符数组:
converter('abc')→'a'=97, 'b'=98, 'c'=99,计算得97+31*(98+31*99)=98274 - 输入字符串数组:
converter(["a","b","c"])→ 转换后和字符数组效果一致,得到相同哈希值
内容的提问来源于stack exchange,提问作者ag3007
相关产品推荐
相关产品推荐

