Выполнить декодер длины в C # - PullRequest
0 голосов
/ 04 апреля 2011

Возможно ли, что кто-нибудь здесь может иметь DECODER длины цикла в 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;
   }
}

1 Ответ

1 голос
/ 04 апреля 2011

Трудно решить это без спецификации для вашей кодировки, но в этом коде

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

Я бы ожидал, что k будет увеличен перед выходом из блока if.

Кроме того, я ожидаю, что следующим if (cv==1) будет else if.

В этом блоке cv==1 я думаю, что вы должны просто обработать следующий символ и позволить внешнему циклу for выполнить свою работу.

Я тоже не понимаю, как этот блок мог работать вообще

...