如何在MatLab中扩展数值范围

omvjsjqw  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(532)

假设我有这个范围的数字,我想扩大这些区间。我的代码在这里出了什么问题?我得到的答案不正确:
音程只用来表示--每个‘事物’用;
我希望输出为:-6-3-2-1 3 4 5 7 8 9 10 11 14 15 17 18 19 20

range_expansion('-6;-3--1;3-5;7-11;14;15;17-20 ')

function L=range_expansion(S)
% Range expansion
if nargin < 1; 
    S='[]';
end

if all(isnumeric(S) | (S=='-')  | (S==',') | isspace(S))
    error 'invalid input';
end
ixr = find(isnumeric(S(1:end-1)) & S(2:end) == '-')+1;
S(ixr)=':';
S=['[',S,']'];
L=eval(S) ;

end

ans =

    -6    -2    -2    -4    14    15    -3
uidvcgyl

uidvcgyl1#

可以使用regexprep;替换为,,并使用:替换定义范围的-。这些-通过它们前面有一个数字来标识。结果是一个可以使用str2num转换为所需输出的字符串。但是,由于此函数计算字符串,为了安全起见,首先检查字符串是否只包含允许的字符:

in = '-6;-3--1;3-5;7-11;14;15;17-20 '; % example
assert(all(ismember(in, '0123456789 ,;-')), 'Characters not allowed') % safety check
out = str2num(regexprep(in, {'(?<=\d)-' ';'}, {':' ','})); % replace and evaluate

相关问题