Schulprojekt (Textverschlüsselung)



  • Yassocool schrieb:

    sehe ich das richtig das ich die array größe vorher definieren muss die passt sich nicht variabel an meine eingabe an.

    Ja. Die Grösse eine Arrays muss bei der Übersetzungszeit bekannt sein (auser due legst sie dynamisch an).

    Naja, ich denke hier ist ein String-Array nicht nötig.
    Du könntest einen einzigen String nehmen, darin Text einlesen und diesen danach verarbeiten. Du könntest beispielsweise überprüfen ob dieser Leerzeichen enthält und so die einzelnen Wörter nacheinander verarbeiten/verschlüsseln. Auf die einzelnen Zeichen im String, kannst du entweder über den Indexoperator (http://www.cplusplus.com/reference/string/string/operator[]/) zugreifen oder über Iteratoren (http://www.cplusplus.com/reference/string/string/begin/).



  • anneXus schrieb:

    Yassocool schrieb:

    sehe ich das richtig das ich die array größe vorher definieren muss die passt sich nicht variabel an meine eingabe an.

    Ja. Die Grösse eine Arrays muss bei der Übersetzungszeit bekannt sein (auser due legst sie dynamisch an).

    Naja, ich denke hier ist ein String-Array nicht nötig.
    Du könntest einen einzigen String nehmen, darin Text einlesen und diesen danach verarbeiten. Du könntest beispielsweise überprüfen ob dieser Leerzeichen enthält und so die einzelnen Wörter nacheinander verarbeiten/verschlüsseln. Auf die einzelnen Zeichen im String, kannst du entweder über den Indexoperator (http://www.cplusplus.com/reference/string/string/operator[]/) zugreifen oder über Iteratoren (http://www.cplusplus.com/reference/string/string/begin/).

    Danke beim 1. teil hab ich mit dem indexoperator gearbeitet. Wenn ich alles in einen string schreibe würde ich es hinbekommen das er vor jedes leerzeichen ay einfügt aber wie verschiebe ich die ersten 2 buchstaben nach hinten?

    bsp. im string steht : "hallo wie gehts dir" über die for schleiche könnte ich ne if bedingung erstellen die vor jedem ' ' ein ay anhängt denk ich...
    aber wie kann ich nach einem ' ' die ersten 2 zeichen die kommen vor das nächste ' ' setzten das ist mir nicht ganz bewusst wie ich das anstellen soll, weil ich ja mit dem operator immer nur auf ein zeichen zugreifen tue? bräuchte dafür nen ansatz

    okay dann probier ich es mal ohne ein array, mich würde aber trotzdem interessieren wie man ein dynamisches array anlegt 😃



  • Geht´s hier noch um den Caesar Chiffre oder um den Pig-Latinizer?
    Bitte bleib´ in einem Thread bei einem Thema und starte für ein neues Thema einen neuen Thread.

    Da du ganze Sätze in´s Schweinelatein übersetzen willst bieten sich dafür C++ streams an:

    #include <string>
    #include <iostream>
    #include <sstream>
    #include <iterator>
    
    std::ostream& pig_latinize( std::ostream& os, const std::string& word )
    {
       if( word.size() > 2 )
       {
          // Wort ist länger als 2 Buchstaben: Wort ab Buchstabe 3 in den Ausgabestrom schreiben,
          // danach die ersten beiden Buchstaben des Worts in den Ausgabestrom schreiben
          // ostream_iterator<char> ginge auch
          std::copy( word.begin() +2, word.end()	 , std::ostream_iterator<std::string::traits_type::char_type>( os ) );
          std::copy( word.begin()   , word.begin() +2, std::ostream_iterator<std::string::traits_type::char_type>( os ) );
       }
       else
       {
          // Wort ist kürzer als 2 Buchstaben: direkt in Ausgabestrom schreiben
          os << word;
       }
       // "ay" immer anhängen
       os << "ay ";
       return os;
    }
    

    Dinge wie Groß- und Kleinschrift sowie das Zerlegen der Eingabe in Teilwörter bleibt dir überlassen 😉



  • DocShoe schrieb:

    Geht´s hier noch um den Caesar Chiffre oder um den Pig-Latinizer?
    Bitte bleib´ in einem Thread bei einem Thema und starte für ein neues Thema einen neuen Thread.

    Da du ganze Sätze in´s Schweinelatein übersetzen willst bieten sich dafür C++ streams an:

    #include <string>
    #include <iostream>
    #include <sstream>
    #include <iterator>
    
    std::ostream& pig_latinize( std::ostream& os, const std::string& word )
    {
       if( word.size() > 2 )
       {
          // Wort ist länger als 2 Buchstaben: Wort ab Buchstabe 3 in den Ausgabestrom schreiben,
          // danach die ersten beiden Buchstaben des Worts in den Ausgabestrom schreiben
          // ostream_iterator<char> ginge auch
          std::copy( word.begin() +2, word.end()	 , std::ostream_iterator<std::string::traits_type::char_type>( os ) );
          std::copy( word.begin()   , word.begin() +2, std::ostream_iterator<std::string::traits_type::char_type>( os ) );
       }
       else
       {
          // Wort ist kürzer als 2 Buchstaben: direkt in Ausgabestrom schreiben
          os << word;
       }
       // "ay" immer anhängen
       os << "ay ";
       return os;
    }
    

    Dinge wie Groß- und Kleinschrift sowie das Zerlegen der Eingabe in Teilwörter bleibt dir überlassen 😉

    Danke erstmal für die antwort allerdings verstehe ich nicht ganz was streams sind.
    den ersten vorgang verstehe ich also std::copy(word.begin() +2, word.end() , den nächsten teil der anweißung allerdings nicht. und das mit dem "os << word" ; auch nicht genau. was ist dieses os? bisher kenne ich aber auch noch keine streams muss ich mir mal anschauen hab nur jetzt leider keine zeit aber werd ich die tage mal machen 😃

    wenn ich mit "using namespace std" arbeite kann ich "std::" immer weglassen oder?

    mein schulprojekt besteht aus 3 teilen caesar chiffre, pig latin und permutationscode und ich dachte ich mach daraus einen thread aber wenn es euch lieber ist könnte ich auch nen neuen aufmachen.


Anmelden zum Antworten