变换一个字符串,使大于5的数字表示为几个数字的总和

时间:2016-03-09 11:11:05

标签: string algorithm matlab

我需要相对于某个值转换字符串,所以

2 3 4 5 6 1 5 16

成为

2 3 4 5 0 5 1 5 0 5 5 5 1

所以,2 = 23 = 34 = 46 = 56 = 15 = 55 = 0,{{1 }}

在这种情况下,我转换了相对于16 = 5 5 5 1的行。我现在不知道该怎么做,所以,还没有代码。

3 个答案:

答案 0 :(得分:6)

您可以使用正则表达式替换(regexprep)。您需要negative lookbehind才能避免将6中的16检测为单个6

x = '2 3 4 5 6 1 5 16';
y = regexprep(x, {'(?<!\d)5' '(?<!\d)6' '16'}, {'5 0' '5 1' '5 5 5 1'});

这给出了

y =
2 3 4 5 0 5 1 1 5 0 5 5 5 1

答案 1 :(得分:2)

我有简单的写循环方法,有人可以给你非循环的矢量化解决方案:

a = [2 3 4 5 6 1 5 16];
k = 5;
c = [];
for t = 1:size(a,2)
b = a(t)/k;
    if b >= 1
        cat1 = [repmat([k],floor(b),1)',mod(a(t),5)];
    else
        cat1 = a(t);
    end
    c = [c,cat1]
end

c是解决方案:

>> c =   2     3     4     5     0     5     1     1     5     0 ...

k你可以设置为5或4或任何数字。

答案 2 :(得分:0)

对不起,我问完后我在2分钟内完成了所有工作。

data=[2 3 4 5 6 1 5 16];
    len=length(data);
    mass=zeros();
    j=1;
    for i=1:len
        if data(i)>5
        x=data(i);
        mass(j)=5;
        mass(j+1)=x-5;
        j=j+2;
        else
            if data(i)==5;
                mass(j)=5;
                mass(j+1)=0;
                j=j+2;
            else data(i)<5;
                mass(j)=data(i);
                j=j+1;
            end
        end
    end