2015-06-26 44 views
1

举个例子考试的问题,我一直在问到“纠结”的字符串,如下所示:如何在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

只是顺便说一句,你可以使用'end'关键字而不是'n'所以's(1:2:n)'在哪里' n = length(s)'与刚才的s(1:2:end)相同' – Dan

回答

4

对于奇数字的长度,你需要减少n1使最后一个字符保持不变。使用mod检测奇数字长。

+3

实际上你可以只用'n-mod(n,2)'来处理奇数和偶数情况 – Dan

0

如果你想随机争抢每一个字符,你可以尝试:

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

洗牌= 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

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 
+2

*代码可以回答这个问题,提供关于为什么和/或这个代码如何回答这个问题提高了它的长期价值的额外上下文。“* –

+0

虽然这段代码可能回答这个问题,但提供了额外的[上下文](https:// meta。 stackexchange.com/q/114762)关于如何和/或为何解决问题将提高答案的长期价值。请记住,你正在为将来的读者回答这个问题,而不仅仅是现在问的人!请编辑您的答案以添加解释,并指出适用的限制和假设。它也不会提到为什么这个答案比其他答案更合适。 – ItamarG3