Wie Verschiebechiffre (auch als Caesar-Verschlüsselung bekannt) umsetzen?
-
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*
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.
Alsochar 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
-
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 Codevoid __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
-
Christian Sonder schrieb:
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!
Ich wollte jetzt jeden einzelnen Buchstaben durhc gehn und speichern und später in einen Strng schreiben!