2013-06-19 21 views
-3

例如我有是有辦法隨機分離字符串轉換成不同的字符串數組,並取回相同相同的字符串

String Text = "ABCDEFGHIJKLMNOPQ"; 

通過一些碼來運行進入

String[] text1 = "AOCN"; 
String[] text2 = "JQBF"; 
String[] text3 = "DMG"; 
String[] text4 = "HPI"; 
String[] text5 = "KEL"; 

然後一些代碼讓它回到

String Text =「ABCDEFGHIJKLMNOPQ」;

這是可能的嗎? 什麼,我想實現的是隨機存儲灑字符到5個不同的字符串數組,並使用代碼來將其恢復到它原來的文本

+8

一切皆有可能 –

+0

什麼是'text1的[]'應該是什麼?帶有「AOCN」的字符串或者.. um .. no。的數組。 –

+0

@GrantWinney編輯了這個問題,它假設它是一個字符串數組,對不起混淆 – user1461511

回答

1

假設對數組進行「隨機」分配字符的請求是針對僞隨機(或者可能是表面上是任意的)分配因此是可逆的,那麼一種技術是基本上使用transposition cipher。然後

算法會是這樣的:

  1. 運行在輸入文本的換位密碼。
  2. 將轉置的文本拆分爲數組。

原始文本將通過顛倒兩個步驟來獲得。

(編輯)

的換位密碼密鑰可以由僞隨機數的從1n一個流,其中n是到其中的輸入字符串爲要分割字符串的數量的。因此,擴展的算法內容如下:

  1. 生成長度m,其中m是輸入字符串的長度的僞隨機數的列表,p,。
  2. 對於所有i,將輸入字符串中的第i個字母分配給輸出字符串編號p[i]

要重組原始字符串:

  1. 對於所有i,得到串在串號p[i]i個字母從下一個未使用的盤符。
+0

當我第一次想到這樣做時,我已經想過使用某種密碼,但是認爲它可能會減慢我的程序太多,所以我將以最後的方式離開這個 – user1461511

+0

如果僞隨機數列表被預先設置,生成的,那麼在檢索數字和使用它們來分配輸入字符串的字符時將涉及很少的計算時間。此外,[過早優化是萬惡之源](http:// en。wikiquote.org/wiki/Donald_Knuth)。 – Simon

0

是的,你可以通過字符重複字符:

using System; 

class Program 
{ 
    static void Main() 
    { 
     const string s = "Hello!"; 
     // Option 1 
     foreach (char c in s) 
     { 
      Console.WriteLine(c);   // Your treatment here 
     } 
     // Option 2 
     for (int i = 0; i < s.Length; i++) 
     { 
      Console.WriteLine(s[i]);  // Your treatment here 
     } 
    } 
} 

你可以用這個來連接(治療porcess):

if (some_condition) text1 += s[i]; 

然後在Your treatment here部分,你可以通過使用C#提供的基本隨機函數。只要你不改變seed,您可以檢索用於生成子,可能恢復它的序列......

可能是,例如,類似的東西:

int seed = 12; 
List<int> lst = new List<int>(); 
// Repeat that until you processed the whole string 
// At the mean time, skip the characters already indexed 
while (lst.Count != s.Length) { 
    int n = new Random(seed).Next(0, s.Length); 
    if (!lst.Contains(n)) { 
     text1 += s[n]; 
     lst.Add(n); 
    } 
} 

在結束lst是您恢復過程的關鍵。

然後您生成子字符串的方式,以及恢復原始字符串的算法也取決於您......您是完全免費的。

注:關於與chunks交易,請參閱Simon的答案。

+0

這不是我想達到的效果我想將分割字符隨機存儲到5個字符串數組中,並能夠將其恢復爲原始文本 – user1461511

+0

您可以使用任何種類的算法,現有算法或自制算法。隨意... –

+0

我不明白什麼是用於 – user1461511

1

對於一個任意的字符串,並假設你的分佈是真正的隨機的,那麼除非你以某種方式存儲隨機因素,否則將無法重新組裝原始字符串。這讓我想起了只寫內存。

0

試試這個:

static void Main(string[] args) 
    { 
     string Text = "ABCDEFGHIJKLMNOPQ"; 


     int chunk = new Random().Next(1,Text.Length/2); 

     var result= Split(Text,chunk); 


     Console.WriteLine("Splited:"); 

     foreach (var word in result) 
     { 
      Console.WriteLine(word); 
     } 


     string toOld = ""; 
     Console.WriteLine("Returned:"); 

     toOld = result.Aggregate((i, j) => i + j); 

     Console.WriteLine(toOld); 

     Console.ReadLine(); 


    } 

    static List<string> Split(string str, int chunkSize) 
    { 
     var re = Enumerable.Range(0, str.Length/chunkSize) 
      .Select(i => str.Substring(i * chunkSize, chunkSize)).ToList() ; 

     var temp = re.Aggregate((i, j) => i + j); 

     if (temp.Length < str.Length) 
     { 
      var last = re.Last(); 
      last += str.Substring(temp.Length, str.Length - temp.Length); 
      re[re.Count-1] = last; 
     } 
     return re; 

    } 

你能控制的塊大小

+0

您提供的代碼不是隨機化文本,而只是吐出它,我需要的是隨機化它並獲取相同的文本 – user1461511

相關問題