2015-06-26 48 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