在 MATLAB 中使用隐式数据类型进行正确的字符串转换

布拉格峰

我有任意字符串,可以根据它们的内容转换为合适的数据类型(即标量双精度、双精度数组或字符串)。str2num()在解释status返回值时完成它的工作,但函数本身评估字符串的内容,其中:

  1. 原因str2num('3-7')-4 (double),但我想坚持'3-7' (char array)
  2. 是一个严重的安全问题,因为它可能会执行任何代码

一种解决方法是使用str2double(),它不会以双数组结束,而只是标量或字符串。不幸的是,isstrprop()并不真正适合于此。

示例输入(和输出):

  • '123.4' -> 123.4(双标量)[由str2double()覆盖str2num()]
  • abc' -> 'abc'(字符数组)[固有地被str2double()覆盖str2num()]
  • '123,456' -> [123, 456](双数组)[str2num()被覆盖]
  • '3-7' -> '3-7'(字符数组)【不知道怎么覆盖】
布拉格峰

解决方案(感谢@user2999345):

function res = str2impl(str, delimiter)
narginchk(1,2);
if isempty(str)
    res = [];
    return
end
if nargin < 2
    delimiter = ',';
end
splits = strsplit(str, delimiter);
res = str2double(splits);
if any(isnan(res)) & ~strcmpi(str, 'NaN') % NaN not specifically requested
    res = str;
end

结束于

C = {'123.4','abc','123,456','3-7','NaN','',[]};
for ii = 1:numel(C)
  r{ii,1} = str2impl(C{ii});
end
disp(r)

[  123.4000]
'abc'
[1×2 double]
'3-7'
[       NaN]
[]
[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章