Wie Verschiebechiffre (auch als Caesar-Verschlüsselung bekannt) umsetzen?



  • RandomAccess85 schrieb:

    Dann lass die Buchstaben im Memo drin und verarbeite sie dort einzeln:

    for (int i = 0; i < Memo1->Lines->Count; i++)
    {
       for (int a = 1; a <= Memo1->Lines->Strings[i].Length(); a++)
       {
          // Verarbeitung von Memo1->Lines->Strings[i].SubString(a,1);
       }
    }
    

    😕 😕 😕

    Das is unschön, aber du hast jederzeit alle Buchstaben und kannst einzeln darauf zugreifen.

    Aber deine Aussage ist schon irgendwie widersprüchlich insich.
    Du willst ALLE Buchstaben haben, WEIL du auf jeden EINZELN zugreifen willst 😕

    So das wollte ich doch haben RandomAccessS85 👍 !!!
    nun kann ich mal schauen wie ich die verschlüsselung vornehme!

    mfg
    schally



  • 😕

    Is aber genau das gleiche wie wir die dir ganze zeit beschrieben haben, nur das bei der anderen Variante der Buchstabe in einer Variable gespeichert wird und von dort aus verarbeitet werden kann!



  • Nun kommt das nächste Problem
    ich kann ja dies so schreiben:

    //Beginn des Verschlüsselungsalgorthmus
          for (int i = 0; i < mem_ver_text->Lines->Count; i++)
          {
             for (int a = 1; a <=mem_ver_text->Lines->Strings[i].Length(); a++)
             {
    
                //Hier nun der Verschlüsselungs Algorithmus
                if(mem_ver_text->Lines->Strings[i]/*Oder kann ich auch hier schon schrieben mem_ver_text->Lines->Strings[i].ToInt()*/=='A')
                {
                   buch_zahl=mem_ver_text->Lines->Strings[i].ToInt()+kennwort;
                   //Kennwort ist eine Zahl im Intger Wert
                }
             }
          }
    

    weil er sagt mir immer das 'A'kein Intgerwer ist!obwohl ich es umwandle!

    mfg
    schally



  • Will mich hier ja nicht in die Problemlösung einmischen, aber Du solltest Dich mal dringend mit den Grundlagen von C++ vertraut machen.

    Wo wandelst Du denn A um?



  • Rostfrei[] schrieb:

    Will mich hier ja nicht in die Problemlösung einmischen, aber Du solltest Dich mal dringend mit den Grundlagen von C++ vertraut machen.

    Wo wandelst Du denn A um?

    *absolut einig*

    @schally

    mit mem_ver_text->Lines->Strings[i] holst du dir nur die Zeile mit dem Index i ... mit mem_ver_text->Lines->Strings[i].Substring(a,1) allerdings den Buchstaben

    mfg, Micha



  • Warum eigentlich Substring? Der normale Indexoperator reicht doch hier auch.
    Ach so:
    Ich stimmen beiden Vorpostern zu.
    Hier ist ein Tutorial
    http://tutorial.schornboeck.net/inhalt.htm



  • Du meinst mem_ver_text->Lines->Strings[i].operator[](a) ?? Jo, das geht auch. Aber das wär ja noch verwirrender 😃



  • nein, ich meinte
    mem_ver_text->Lines->Strings[i][a]



  • aso sorry, lol!

    @schally: siehste wieder nen Beispiel dafür das es immer mehrere Wege zur Lösung gibt 😃 !!



  • schally schrieb:

    [cpp]
    //Beginn des Verschlüsselungsalgorthmus
    for (int i = 0; i < mem_ver_text->Lines->Count; i++)
    {
    for (int a = 1; a <=mem_ver_text->Lines->Strings[i].Length(); a++)
    {

    //Hier nun der Verschlüsselungs Algorithmus
    if(mem_ver_text->Lines->Strings[i]/*Oder kann ich auch hier schon schrieben mem_ver_text->Lines->Strings[i].ToInt()*/=='A')
    {
    buch_zahl=mem_ver_text->Lines->Strings[i].ToInt()+kennwort;
    //Kennwort ist eine Zahl im Intger Wert
    }
    }
    }
    [/cpp]

    Wie kommst Du darauf, daß in mem_ver_text->Lines->Strings[i] (also der i-ten Zeile) eine Integerzahl steht? Das ist doch eher unwahrscheinlich! Was Du meinst, ist in etwa folgendes:

    for (int i = 0; i < mem_ver_text->Lines->Count; i++)
            for (int a = 1; a <=mem_ver_text->Lines->Strings[i].Length(); a++)
            {
                // Zeichen holen, ASCII-Wert bestimmen und verschlüsseln:
                buch_zahl = (int)mem_ver_text->Lines->Strings[i][a] + kennwort;
    
                // und hier noch mögliche Überläufe abfangen ...
            }
    

    PS: Da war ich wieder mal etwas zu langsam 😉



  • Die Grundlagen habe ich drauf(wir Programmieren seit etwa 2Monaten mit dem Builder vorher DEVC++(Konsole))
    aber wir bekommen halt net alles gezeigt das is en riesen nachteil weil wir auch noch assembler,java,php und html machen und c++ is bei uns nach diesen Projekt erledigt!

    Ich war der meinung man könnte .ToInt() -Fkt auch hier benutzen!

    aber die Hilfe vom Borland is auch net grad die beste müsst ihr zugeben!

    C.Sonder schrieb:

    Wie kommst Du darauf, daß in mem_ver_text->Lines->Strings[i] (also der i-ten Zeile) eine Integerzahl steht? Das ist doch eher unwahrscheinlich! Was Du meinst, ist in etwa folgendes:

    Weil ich ja mit der FKT ToInt() Arbeitete dachte ich er würde sie nun in ein Intger Wert Umwandeln.

    mfg
    schally



  • Nein, müssen wir nicht. Ich finde die Hilfe eigentlich ganz gut.
    Du willst auf die einzelnen Buchstaben eines Strings zugreifen. Die sind nunmal vom Typ char. Wenn du in die Hilfe zu ToInt schaust wirst du feststellen, dass sie versucht den Inhalt eines Strings in eine Int-Zahl umzuwandeln. Du brauchst für dein Chiffre aber den ASCII-Wert deines Buchstabens. Das sind nunmal völlig verschiedene Dinge.
    Mit mem_ver_text->Lines->Strings[i][a]
    greifst du auf den Buchstaben Nummer a zu. Der ist vom Typ char. Den kannst du nun wie Christian es gezeigt hat in einen Int casten. Das ist aber eigentlich nicht nötig, da char implizit in int umgewandelt wird.
    Also

    char buchstabe = mem_ver_text->Lines->Strings[i][a]; // Buchstabe zur Verinfachung zwischenspeichern
    buch_zahl = (int)buchstabe  + kennwort; // in int Umwandeln und kennwort dazu addieren (Was ist kennwort eigentlich bei dir?)
    //buch_zahl weiterverarbeiten
    


  • Muss mich nochmal melden.

    Die Borlandhilfe ist, wenn man sie einmal verstanden hat, absolute Klasse.

    Lines->Strings[] gibt einen String wieder. Wieso willst Du das in einen Integer umwandeln? Buchstaben als Zahlen? Und wenn Du das in eine Zahl umgewandelt hättest, wieso vergleichst Du das Ganze wieder auf einen String ('A')?
    Ich verstehe den Sachverhalt irgendwie nicht so ganz.

    Grüsse

    //Edit: ich sollte meine Tasten tieferlegen, dann kann ich wenigstens schneller posten



  • @Rostfrei[]

    wieso vergleichst Du das Ganze wieder auf einen String ('A')?

    'A' ist kein String, sondern ein char 😉

    @Schally
    In der Schule macht ihr C++, PHP, Java, Html und Assembler??? Ich würde sagen, da hat sich euer Lehrer ziemlich verzettelt. Das bringt die Schüler doch mehr durcheinander, als daß es sie voran bringt. Besser wäre es wohl, eine Sprache richtig zu lernen und die anderen hinterher kurz mal anzusprechen, damit man sieht, was es sonst noch so alles gibt.
    Wie dem auch sei, berichte uns doch lieber mal von Deinem Fortschritt! Bist Du inzwischen mit dem Programm weitergekommen?



  • Ja weil normal Programmieren wir in Java oder PHP aber da ich mit C++ nur bzw wir alles nur 10Schulstunden gehabt haben is es halt net so einfach!
    Aber ich muss sagen ihr helft mir sehr!
    Danke!!!

    So nun hiermal ein Anfang des Verschlüsselung Algorthmus

    if(mem_ver_text->Text.IsEmpty()==true)
       {
          ShowMessage("Nichts zum Verschlüsseln da!");
       }
       else
       {
          lbl_size->Caption=mem_ver_text->Text.Length();//Zum Ausgeben der Länge des Textes
          ShowMessage("Bitte geben Sie jetzt den Key ein!");
          Tfrm_key *key_ein= new Tfrm_key(this);//Zeiger auf Key Eingabe Fenster
          key_ein->ShowModal();//Zum Aufrufen des Key Eingabe Fensters
          int buch_zahl;//Zum verschl.Buchstaben errechnen
          //Beginn des Verschlüsselungsalgorthmus
          char buchstabe;//um einzeln Buchszaben zu Speichern
          for (int i=0;i<mem_ver_text->Lines->Count;i++)
          {
             for (int j=1;j<=mem_ver_text->Lines->Strings[i].Length();j++)
             {
                //Hier nun der Verschlüsselungs Algorithmus
                // Zeichen holen, ASCII-Wert bestimmen und verschlüsseln:
                buchstabe = mem_ver_text->Lines->Strings[i][j];
    //Buchstabe zur Verinfachung zwischenspeichern
                buch_zahl = (int)buchstabe+kennwort; 
    // in int Umwandeln und kennwort dazu addieren
             }
          }
          Memo1->Lines->Text=IntToStr(buch_zahl);
    /*Zu Testzwecken soll es in einem Extra Memo Feld anzeigen*/
    //->Hier gibt er mir nur die Zahl,anstatt denn Buchstaben, aus aber ich Caste //doch richtig mit der Funktion oder? 
    }
    

    Kennwort ist aus dem Extra Eingabe Formular das ich gemacht habe!
    Hier mal der Code

    void __fastcall Tfrm_key::btn_takeClick(TObject *Sender)
    {
       if(edt_key_ein->Text.IsEmpty()==true)
       {
          ShowMessage("Geben Sie was ein!");
       }
       else
       {
          frm_main->kennwort=edt_key_ein->Text.ToInt();
          Close();
       }
    }
    


  • schally schrieb:

    aber die Hilfe vom Borland is auch net grad die beste müsst ihr zugeben!

    Die Hilfe von Borland ist genial. (siehe auch: http://www.junix.ch/bcb/help/hilfe.html ) Bedingt allerdings, dass man die Konzepte der Sprache verstanden hat (was bestimmt nicht nach 10 Schulstunden der Fall ist) Womit wr im übrigen wieder bei dem sind was schon andere vorher gesagt haben: Die Grundlagen hast du definitv nicht drauf. Grundlagen bedeutet nicht irgendwas tippen zu können, das hoffentlich läuft...



  • jo ok ich mein in anderen Sprachen is es besser!
    aber wenn man halt nur 10Schul Stunden gezeigt bekommen hat und neben her eine Datenbank,PIC -Projekt(Thermometer) bauen und betreuen muss kann man halt net alles könne!
    mfg
    schally



  • Hi,

    *ironie an*
    was ist den das für eine Schule,
    hört sich für mich eher wie eine
    unbezahlte Praktikumsstelle an
    *ironie aus*
    🤡
    Grüsse



  • for (int i=0;i<mem_ver_text->Lines->Count;i++) 
          { 
             for (int j=1;j<=mem_ver_text->Lines->Strings[i].Length();j++) 
             { 
                //Hier nun der Verschlüsselungs Algorithmus 
                // Zeichen holen, ASCII-Wert bestimmen und verschlüsseln: 
                buchstabe = mem_ver_text->Lines->Strings[i][j]; 
    //Buchstabe zur Verinfachung zwischenspeichern 
                buch_zahl = (int)buchstabe+kennwort; 
    // in int Umwandeln und kennwort dazu addieren 
             } 
          } 
          Memo1->Lines->Text=IntToStr(buch_zahl);
    

    Hmm, jetzt hast Du den kompletten Text verschlüsselt (mehr oder weniger, es fehlt immer noch die Überlaufabfrage!!!), läßt die verschlüsselten Zeichen im Speicher verfliegen und fügst zuallerletzt den IntegerWert des letzten Zeichens in ein Memo ...
    Versuch's mal ungefähr so:

    Memo1->Lines->Text += (char)buch_zahl;
    

    Und das machst Du nach JEDEM einzelnen verschlüsselten Buchstaben!



  • Nö HBFI ....

    aber nun zu meinem Problem zurück ich benutze die Richtige Methode
    IntToStr(int_wert)-->Mein Beispiel :IntToStr(buch_zahl);!

    aber warum gibt er mir nichts aus!

    int buch_zahl;//Zum versch.Buchstaben errechnen
          //Beginn des Verschlüsselungsalgorthmus
          char buchstabe;
          String Buchstabe;
          for (int i=0;i<mem_ver_text->Lines->Count;i++)
          {
             for (int j=1;j<=mem_ver_text->Lines->Strings[i].Length();j++)
             {
                //Hier nun der Verschlüsselungs Algorithmus
                // Zeichen holen, ASCII-Wert bestimmen und verschlüsseln:
                buchstabe = mem_ver_text->Lines->Strings[i][j];//Buchstabe zur Verinfachung zwischenspeichern
                buch_zahl = (int)buchstabe+kennwort; // in int Umwandeln und kennwort dazu addieren
             }
          }
    Memo1->Lines->Text=Memo1->Lines->Text+(char)buch_zahl;//Buchstabe anzeigen
    

    Nachtrag So Problem gelöst!!!!
    mfg
    schally


Anmelden zum Antworten