如何在MATLAB中纠缠/加扰/重新排列字符串?

时间:2015-06-26 13:03:26

标签: string matlab

对于一个例子考试问题,我被要求纠结"纠结"如下所示的字符串:

tangledWord('today')='otady'
tangledWord('12345678')='21436587'

我知道这是一个非常简单的问题,但它让我感到难过。

当长度均匀时,我可以让它产生一个纠结的词,但是当它很奇怪时我会遇到麻烦,这是我的功能:

function tangledWord(s)    
n=length(s);    
a=s(1:2:n);    
b=s(2:2:n);    
s(1:2:n)=b;    
s(2:2:n)=a;    
disp(s);    
end

3 个答案:

答案 0 :(得分:4)

对于奇数字长度,您需要将n减少1以保持最后一个字符不变。使用mod检测奇数字长度。

答案 1 :(得分:0)

如果你想随机加扰每个字符,你可以尝试:

string = '1234567';
shuffled = string(randperm(numel(string)))
  

shuffled = 5741326

如果你想改变前两个字符:

tangled = [string(2) string(1) string(3:end)]
  

纠结= 2134567

如果你想改变每两个字符:

n = ( numel(string)-mod(numel(string),2));
tangled2 = [flipud(reshape(string(1:n),[],n/2))(:); string(n+1:end)]'
  

tangled2 = 2143657

答案 2 :(得分:0)

function tangledWord(s)
n=length(s);
if mod(n,2) == 0
    a=s(1:2:n);
    b=s(2:2:n);
    s(1:2:n)=b;
    s(2:2:n)=a;
    disp(s)
elseif mod(n,2) ~= 0
    a=s(1:2:end-1);
    b=s(2:2:end-1);
    s(1:2:end-1)=b;    
    s(2:2:end-1)=a; 
    disp(s)
end
end