Verschlüsselung durch Lauflängenkodierung - zeigt nur Werte <1 an



  • Guten abend,

    mittlerweile hat es geklappt ein Programm zu schreiben, dass einen Text einliest, ihn verschlüsselt (mit RLE) und wieder ausgibt.

    Mein Problem ist aber, dass ich möchte, das auch die Anzahl 1 ausgegeben wird. Leider komme ich nicht auf die Lösung - für Hilfe wäre ich dankbar.

    Einen schönen Abend noch und schon mal vielen Dank.

    Mein Code:

    #include <string>
    #include <iostream>
    #include <sstream>

    std::string Decode(const std::string& input);
    std::string Encode(const std::string& input);

    int main()
    {
    std::string input = "xxxvvvkaka";

    std::cout << input << std::endl;

    std::string res = Encode(input);

    std::cout << res << std::endl;

    std::cout << Decode(res) << std::endl;

    return 0;
    }

    std::string Decode(const std::string& input)
    {
    std::string result;

    for (size_t i = 0; i < input.length(); ++i)
    {
    if (input[i] == '\1')
    {
    result += input[++i];
    }
    else if (isdigit(input[i]))
    {
    char c = (input[i + 1] == '\1' ? input[i + 2] : input[i + 1]);

    for (size_t j = 1; j < (size_t) input[i] - '0'; ++j)
    {
    result += c;
    }
    }
    else
    {
    result += input[i];
    }
    }

    return result;
    }

    std::string Encode(const std::string& input)
    {
    std::string result;

    int count = 1;

    for (size_t i = 0; i < input.length(); ++i)
    {
    if (input[i + 1] == input[i])
    {
    ++count;
    }
    else
    {
    if (count > 2 && count <= 9)
    {
    result += count + '0';
    }

    if (isdigit(input[i]))
    {
    result += '\1';
    }

    if (count == 2)
    {
    result += input[i];
    }

    result += input[i];

    count = 1;
    }
    }

    return result;
    }



  • 1. RLE ist eine Codierung, keine Verschlüsselung.

    2. Codetags.



  • 😕

    Auch wenn ich es falsch formuliert habe, bleibt mein Problem, dass auch bei Werten, die nur einmal vorkommen - ein "Zähler" erscheinen sollte.

    Bitte um Hilfe.



  • Ohne Codetags liest sich das niemand durch.

    #include <iostream>
    
    int main()
    {
      std::cout << "So sollte das aussehen.\n";
    }
    


  • Ein Wort noch zu den Tags - ich gebe sie zwar ein, aber schon in der Vorschau wird alles automatisch eingerückt. Übrigens auch, wenn ich Tabs u. ä. oder die vorgegebenen Zeichen bei der Eingabe verwende...

    Ich würde das wirklich gerne abstellen...

    Schönes Restwochenende.



  • wie? es wird eingerückt?

    wenn du deinen code in deinem editor schön formatiert hast und den per copy/paste zwischen die code tags reinschiebst, dann wird der code nicht umformatiert.
    wenn dein code aber schon imeditor schrecklich aussieht, machen die [cpp] tags nicht anderes mehr


Anmelden zum Antworten