2011-04-04 3 views
0

Est-il possible que n'importe qui ici ait un DECODER en C#? J'ai vraiment besoin de ce code. Merci.Décodeur de longueur de course en 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

Il serait utile d'inclure des détails sur la distance que vous avez déjà. –

+0

Décodage d'octets? – Skurmedel

+0

est ce devoir? – BrokenGlass

Répondre

1

Il est difficile de résoudre ce sans la spécification de l'encodage, mais dans ce code

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

j'attendre k à incrémenter avant de quitter le bloc si.

En outre, je m'attendrais à ce que le prochain if (cv==1) soit un else if à la place.

Dans ce bloc cv==1, je pense que vous devriez simplement traiter le caractère suivant et laisser la boucle externe faire son travail.

Je ne comprends pas non plus comment ce bloc pourrait fonctionner du tout