2011-04-04 53 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循环完成它的工作。

我也不明白这个块怎么可以工作