假设我有这个范围的数字,我想扩大这些区间。我的代码在这里出了什么问题?我得到的答案不正确:
音程只用来表示--每个‘事物’用;
我希望输出为:-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
1条答案
按热度按时间uidvcgyl1#
可以使用
regexprep
将;
替换为,
,并使用:
替换定义范围的-
。这些-
通过它们前面有一个数字来标识。结果是一个可以使用str2num
转换为所需输出的字符串。但是,由于此函数计算字符串,为了安全起见,首先检查字符串是否只包含允许的字符: