2011-04-04 64 views
0

這裏有人可能在C#中有遊程解碼器嗎?我真的需要上述代碼。謝謝。C中的遊程長度解碼器#

using System; 
class RLDEC 
{ 
static void Main() 
{ 
    int t = int.Parse(Console.ReadLine()); 

    for (int k = 0; k < t; k++) 
    { 
     string s = Console.ReadLine(); 
     s = runLengthDecoder(s); 
     Console.WriteLine(s); 
    } 

} 

    static string runLengthDecoder(string s) 
    { 
     string d = ""; // decoded string 
     int cv; // current value 

     for(int k = 0; k < s.Length; k++) 
     { 
      cv = Convert.ToInt32(s[k]) - 48; 

      if (k + 1 < s.Length && cv != 1 && cv >= 2 && cv <= 9) 
      { 
      for(int v = 0; v < cv; v++) 
       d += s[k+1]; 
      } 

      if (cv == 1) 
      { 
      int z = k + 1; 
      while(k < s.Length && z < s.Length && Convert.ToInt32(s[z]) - 48 != 1) 
       { 
       d += s[z]; 
       z++; 
       k++; 
       } 
      k++; 
      } 
     } 
     return d; 
    } 
} 
+0

包括你已經有多遠的細節是有益的。 – 2011-04-04 13:12:01

+0

解碼字節? – Skurmedel 2011-04-04 13:12:12

+0

正在做作業嗎? – BrokenGlass 2011-04-04 13:16:44

回答

1

很難解決這個不規範的編碼,但在這個代碼

 if (k + 1 < s.Length && cv != 1 && cv >= 2 && cv <= 9) 
     { 
     for(int v = 0; v < cv; v++) 
      d += s[k+1]; 
     } 

我希望k可離開,如果塊之前遞增。

此外,我預計下一個if (cv==1)else if而不是。

在那個cv==1塊中,我認爲你應該只處理下一個字符,並讓外部for循環完成它的工作。

我也不明白這個塊怎麼可以工作