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



  • Braunstein schrieb:

    AnsiString test = mem_ver_text->Text; //schreibt den Inhalt vom Memo in die Variable test
    
    for (int i = 1; i <= test.Length(); i++) //eine Schleife von 1 bis zur Länge des Strings
    {
       char ch = test[i]; //Schreiben des Buchstabens Nr. i in die Variable ch
        /*aber muss dann nicht [ch] en Feld sein da ich mehrere Buchstaben Reinschrieben will ? */
    
    }
    

    mfg
    schally



  • Ich denk du willst jedes mal nur einen Buchstaben haben 😕 ...

    ch wird bei jedem Durchlauf der Schleife überschrieben.

    AnsiString test = mem_ver_text->Text; //schreibt den Inhalt vom Memo in die Variable test
    
    for (int i = 1; i <= test.Length(); i++) //eine Schleife von 1 bis zur Länge des Strings
    {
       char ch = test[i]; //Schreiben des Buchstabens Nr. i in die Variable ch
    
       // Hier kann jetzt deine Routine zur Abarbeitung des Buchstaben rein...
    
    }
    


  • Wenn das nicht das ist was du brauchst, dann solltest du uns erklären was du willst.
    Du hast gefragt.
    1.

    us dem was aus ner memo komp in eine variable geschrieben wird

    steht in der ersten Zeile
    2.

    und ich auf jeden buchstaben zugrteifen kann

    Das macht die Schleife und die Zeile darin.

    Aus diesem Grundgerüst läßt sich prima ein Verschiebechiffre bauen. Du brauchst doch nur noch eine zweite AnsiString-Variable die den verschobenen Text aufnimmt.



  • RandomAccess85 schrieb:

    Ich denk du willst jedes mal nur einen Buchstaben haben 😕 ...

    ch wird bei jedem Durchlauf der Schleife überschrieben.

    AnsiString test = mem_ver_text->Text; //schreibt den Inhalt vom Memo in die Variable test
    
    for (int i = 1; i <= test.Length(); i++) //eine Schleife von 1 bis zur Länge des Strings
    {
       char ch = test[i]; //Schreiben des Buchstabens Nr. i in die Variable ch
       
       // Hier kann jetzt deine Routine zur Abarbeitung des Buchstaben rein...
    
    }
    

    nee ich will alle buchstaben auf einmal haben 😉 weil ich ja auch jeden buchstaben einzeln zugreifen muss!

    mfg
    schally



  • In test sind doch alle Buchstaben drin.
    Weißt du wie eine for-schleife funktioniert?



  • ja weis ich !

    for(startbedigung;abbruchbedinung;erhöhung/verkleinnern bis abbruchbedingung erreicht)!!!

    aber wie kann ich in einem AnsiString auf einzelne Buchstaben zugreifen?

    char buchstabenfeld[1000];//Für jeden Einzelnen Buchstaben
    for(int i=0;i<test.length();i++ )
    {
     buchstabenfeld[i]=test[i].c_str();
    }
    

    so?



  • 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 😕



  • schally schrieb:

    aber wie kann ich in einem AnsiString auf einzelne Buchstaben zugreifen?

    char buchstabenfeld[1000];//Für jeden Einzelnen Buchstaben
    for(int i=0;i<test.length();i++ )
    {
     buchstabenfeld[i]=test[i].c_str();
    }
    

    so?

    mit test[i] greifst du auf jeden einzelnen buchstaben zu ... was vor dem = steht ist nur die Variable in die du den Buchstaben "zwischenspeicherst"...



  • So wäre das richtig.

    char buchstabenfeld[1000];//Für jeden Einzelnen Buchstaben
    for(int i=1;i<=test.Length();i++ )
    {
     buchstabenfeld[i-1] = test[i];
    }
    buchstabenfeld[test.Length()] = '\0'; //Nullterminierung nicht vergessen
    

    Wozu willst du aber deine Buchstaben erst in ein char-Array packen, wenn du über die AnsiStringvariable direkt darauf zu greifen kannst?



  • 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


Anmelden zum Antworten