2011-11-16 80 views
0

我想基本上重新排列字母與關鍵字infront,因爲我正在做一個簡單的替代密碼。我有種解決這個問題的邏輯,但我在編碼方面有點困難。重新排列字母(VB)

我想要的是像什麼:

Dim key = "keyword" 

    For i = 0 to 26 

    'insert keyword and put in A to Z after without duplicating characters 

    Next 


'output: keywordabcfghijlmnpqstuvxz 
+0

您能否給我們更多關於「規則」的內容?從目前爲止,您不需要(for)循環...只需在'key'值前添加'abcfghijlmnpqstuvxz'。如果這不是您想到的完整方法,請讓我們瞭解更多 – Nonym

+0

@NonymIty:他不想重複附錄中關鍵字的字符。 –

+1

不應該是0到25嗎? –

回答

3

我想通過按鍵循環比通過拼音循環清潔劑:

Dim key as string = "keyword" 

Dim alphabet As new StringBuilder("abcdefghijklmnopqrstuvwxyz") 

for each c As Char in key 
    alphabet.Replace(c.ToString(), Nothing) 
next 

return key & alphabet.ToString() 

或略微更有效的變化更換線路如下,以避免掃描字母表的所有26個字母在每次迭代:

alphabet.Replace(c.ToString(), Nothing, 0, 1) 
+1

這種解決方案變得更有效因爲密鑰變長:key.len x((26 + key.len)/ 2)次。 (字母變得更短,因爲它被刪除)。其他解決方案:26×key.len次。 –

+0

謝謝你的回覆 –

+0

@GerhardPowell我同意這一個搜索少,但不是這一個key.len X alphabet.len/2(aka key.len X 26/2 aka key.len X 13)不包括收縮字母表。每次傳球只會變得更好(更快)。你能詳細說明你提到的'+ key.len'嗎? – tcarvin

1

這裏是VB中的解決方案:

Public Function words(key As String) As String 
    Dim ret As String 
    ret = key 
    key = key.ToLower() 
    For c As Char = "a"c To "z"c 
     If Not key.Contains(c) Then 
      ret = ret + c.ToString 
     End If 
    Next 

    Return ret 
End Function 

如果你想檢查獨特的字符爲重點,那麼你可以運行循環訪問鍵的字符,如果已經存在,則刪除當前的字符。請記住,如果刪除字符,請將for循環移回一個字符。

+0

謝謝:)我會嘗試刪除字符,如果他們重複 –

3
Public Function Rearrange(keyword As String) As String 
    Dim cipher As New StringBuilder(26) 
    cipher.Append(keyword) 
    For c As Char = "a"C To "z"C 
     If Not keyword.Contains(c) Then 
      cipher.Append(c) 
     End If 
    Next 
    Return cipher.ToString() 
End Function 
+0

謝謝你的回覆它真的幫助 –