Zadanie - niewielkie różnice na wyjściu

0

Próbuję zrobić to zadanie:
http://www.codeabbey.com/index/task_view/variable-length-code

W zasadzie nie jest ono trudne, i stworzyłem kod, który powinien działać bez problemów. Jednak, między pożądanym wyjściem, a moim wyjściem są pewne różnice, i kompletnie nie wiem z czego one wynikają. I stąd moje pytanie, czy ktoś mógłby naprowadzić mnie, gdzie popełniam błąd:

Mój kod:

 
using System;
using System.Linq;
using System.Text.RegularExpressions;


namespace Variable_Length_Code
{
    class Program
    {
        static void Main(string[] args)
        {
            string s = Console.ReadLine();

            string[] res = Encode(s);

            foreach (var x in res) Console.Write(x + " ");
            Console.ReadLine();
        }


        static string[] xSplit(string s, int len)
        {
            return Regex.Matches(s, ".{1," + len + "}").Cast<Match>().Select(n => n.Value).ToArray();
        }


        static string ConvertBinToHex(string binstr)
        {
            return Convert.ToInt32(binstr, 2).ToString("x");
        }

        static string[] Encode(string raw)
        {
            string res = "";

            foreach(var c in raw)
            {
                switch (c)
                {
                    case ' ':
                        res += "11";
                        break;
                    case 't':
                        res += "1101";
                        break;
                    case 'n':
                        res += "10000";
                        break;
                    case 's':
                        res += "0101";
                        break;
                    case 'r':
                        res += "01000";
                        break;
                    case 'd':
                        res += "00101";
                        break;
                    case '!':
                        res += "001000";
                        break;
                    case 'c':
                        res += "000101";
                        break;
                    case 'm':
                        res += "000011";
                        break;
                    case 'g':
                        res += "0000100";
                        break;
                    case 'b':
                        res += "0000010";
                        break;
                    case 'v':
                        res += "00000001";
                        break;
                    case 'k':
                        res += "0000000001";
                        break;
                    case 'q':
                        res += "000000000001";
                        break;
                    case 'e':
                        res += "101";
                        break;
                    case 'o':
                        res += "10001";
                        break;
                    case 'a':
                        res += "011";
                        break;
                    case 'i':
                        res += "01001";
                        break;
                    case 'h':
                        res += "0011";
                        break;
                    case 'l':
                        res += "001001";
                        break;
                    case 'u':
                        res += "00011";
                        break;
                    case 'f':
                        res += "000100";
                        break;
                    case 'p':
                        res += "0000101";
                        break;
                    case 'w':
                        res += "0000011";
                        break;
                    case 'y':
                        res += "0000001";
                        break;
                    case 'j':
                        res += "000000001";
                        break;
                    case 'x':
                        res += "00000000001";
                        break;
                    case 'z':
                        res += "000000000000";
                        break;                    
                }
            }

            while (res.Length % 8 != 0) res += "0";

            string[] ReadyToConvert = xSplit(res, 8);

            string[] ans = new string[ReadyToConvert.Length];
            
            for(int i = 0; i != ReadyToConvert.Length; i++)
            {
                string s = ConvertBinToHex(ReadyToConvert[i]);

                if(s.Length == 1)
                {
                    s = "0" + s;
                }

                ans[i] = s.ToUpper();
            }

            return ans;
        }
    }
}

Moje wyjście:

D8 EB 24 90 39 52 AB 12 40 69 77 02 FA 6F 76 B9 02 22 DD C0 B9 09 81 68 5B 02 D8 6E 42 EB DA BE 9D 03 9B 01 B8 83 24 9C 80 B1 07 51 A0 64 DE 22 60 DA 04 68 BA 57 70 C7 02 A5 75 30 08 34 A9 D2 E5 AB A8 18 BA 98 C3 88 9B 24 9D 84 AB AD 00 35 77 02 E0 AD 87 A7 70 AF 53 61 BA 8C 41 2A 1C 05 BC 44 F4 EA DC 81 62 4C 60 9A BB 81 75 18 A7 A5 78 44 1F A7 78 51 6A AA 74 08

Oczekiwane wyjście:
98 CB 24 90 39 52 AB 12 40 69 77 02 F2 6E 76 B9 02 22 DD C0 B9 09 81 68 5B 02 D8 4E 42 CB 9A BC 9D 03 9B 01 B8 83 24 9C 80 B1 07 51 A0 64 DE 22 60 DA 04 68 BA 57 70 C7 02 A5 65 30 08 34 A9 D2 E5 AB 28 18 B2 98 C3 88 9B 24 9D 84 AB AD 00 35 77 02 E0 AD 87 27 70 AE 53 61 3A 8C 41 2A 1C 05 BC 44 E4 EA DC 81 62 4C 60 9A BB 81 75 18 A7 A5 78 44 1F 27 78 51 6A AA 64 08

1

I chyba lepiej jakbyś użył słownika dla kodowania tych liter zamiast tego switch'a.

Tak na szybko, tyle, że w c++:

#include <string>
#include <iostream>
#include <bitset>
#include <map>

std::map<char, std::string> letter_codes { { ' ', "11" }, { 't', "1001" }, { 'n', "10000" }, { 's', "0101" }, { 'r',
    "01000" }, { 'd', "00101" }, { '!', "001000" }, { 'c', "000101" }, { 'm', "000011" }, { 'g', "0000100" }, { 'b',
    "0000010" }, { 'v', "00000001" }, { 'k', "0000000001" }, { 'q', "000000000001" }, { 'e', "101" }, { 'o', "10001" },
    { 'a', "011" }, { 'i', "01001" }, { 'h', "0011" }, { 'l', "001001" }, { 'u', "00011" }, { 'f', "000100" }, { 'p',
        "0000101" }, { 'w', "0000011" }, { 'y', "0000001" }, { 'j', "000000001" }, { 'x', "00000000001" }, { 'z',
        "000000000000" } };

int to_hex(std::string bin) {
  std::bitset<8> binary(bin);

  return binary.to_ulong();
}

int main(int argc, char *argv[]) {
  std::string input;
  std::string output;

  std::cout << "Enter text: ";
  getline(std::cin, input);

  for (char &letter : input) {
    output += letter_codes[letter];
  }

  while (output.length() % 8 != 0)
    output += '0';

  for (unsigned int i = 0; i < output.length() / 8; ++i) {
    std::cout << std::hex << to_hex(output.substr(8 * i, 8)) << ' ';
  }

  return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1