Problem mit Codierung/Decodierung
-
Hallo Leute!
Ich habe die Aufgabe eine Codierung - Decodierung (Cäsar Methode) zu schreiben und ich komm auf keinen vernünftigen Ansatz!
Bitte um Hilfe!#include <stdio.h> #include <stdlib.h> // Needed for invocation of function strlen to compute length of a string #include <string.h> // Encodes an ASCII-message of a specific length by adding shift #include <conio.h> #include <ctype.h> char *encode(char *message, int shift, int length) { // IMPLEMENT ENCODE HERE! } // Decodes an ASCII-message of a specific length by subtracting shift char *decode(char *message, int shift, int *length) { // IMPLEMENT DECODE HERE! int main(void) { char input[2][100]; // CHANGE shift here until you get a meaningful decoded message int shift = 1; // Write encoded message into variable input[0] sprintf(input[0],"Kpl']hyphisl'j'pu'H|mnhil'8'oh{'klu'^ly{'<("); // Decode message with shift decode(input[0],shift,strlen(input[0])); printf("%s\n", input[0]); // Encode message sprintf(input[1],"Informatik ist cool!"); encode(input[1],shift,strlen(input[1])); printf("%s\n",input[1]); // Check reversibility of encode and decode functions printf("%s\n", encode(input[0],shift,strlen(input[0]))); printf("%s\n", decode(input[1],shift,strlen(input[1]))); return EXIT_SUCCESS; }
-
Hallo,
lies dir nochmal die Sache mit den Arrays und Strings durch.
Wie man auf ein Array zugreift zeigst du ja bei deinem input.
Ein String ist ein Array. Das Ende vom String wird mit dem Wert 0 gekennzeichnet.
Du kannst auch jedes Zeichen als Ganzzahlwert auffassen.Deine encode und decode Funktionen wissen nicht wo sie die Daten hinschreiben sollen. Außerdem können sie die Länge selber feststellen.
Ich würde sie so ähnlich wie strncpy machen. Statt der Länge den Shift angeben.
char *caeser(char *code, char *org, int shift) { // codiere den Inhalt von org nach code // indem jeder Buchstabe durch einen anderen ersetzt wird, // der im Alphabet um shift Positionen versetzt ist. return code; }
PS: Wenn shift negativ sein darf, kannst du auch gleich decodieren
PPS: In der Codierfunktion darf zu Testzwecken durchaus printf stehen.
-
Hi, ist das die Aufgabe also habt ihr diesen Quelltext bekommen?
Weil dieser Funktionsprototyp gefällt mir irgendwie nicht..char *encode(char *message, int shift, int length);
Da length übergeben wird, und char* zurückgegeben wird, müsste man hier also Speicher aus dem Heap anfordern. Diesen müsste man aber vor verlassen der Funktion auch wieder freigeben wenn diese mehr oder weniger praktisch sein soll. Gibt man den Speicher aber wieder frei zeigt der Rückgabewert ins Nirwana und somit ist diese Funktion für die Tonne
Stoppt mich wenn ich was dummes sage, aber das sieht alles nicht sonderlich professionell aus.. was spricht gegen das übergeben von einem Zeiger auf einen freien Puffer? Ich denke das wäre hier wesentlich angenehmer.
-
Ich glaub ich bin zu blöd für den scheiß!
Ich weiß genau was ich machen soll, aber wie sag ich das mit einem array?
Kann mir das hier jemand auflösen, damit das ding codiert und decodiert.....
-
cooky451 schrieb:
Hi, ist das die Aufgabe also habt ihr diesen Quelltext bekommen?
Weil dieser Funktionsprototyp gefällt mir irgendwie nicht..char *encode(char *message, int shift, int length);
Da length übergeben wird, und char* zurückgegeben wird, müsste man hier also Speicher aus dem Heap anfordern. Diesen müsste man aber vor verlassen der Funktion auch wieder freigeben wenn diese mehr oder weniger praktisch sein soll. Gibt man den Speicher aber wieder frei zeigt der Rückgabewert ins Nirwana und somit ist diese Funktion für die Tonne
Stoppt mich wenn ich was dummes sage, aber das sieht alles nicht sonderlich professionell aus.. was spricht gegen das übergeben von einem Zeiger auf einen freien Puffer? Ich denke das wäre hier wesentlich angenehmer.
Ja dieser quelltext ist die vorgabe - ich soll ihn nur vervollständigen.....wie gesagt hab aber keinen plan mehr!
Wir sollen den vorgegebenen Text aus dem array auslesen und dann dekodieren in dem wir ihn durch eine schleife laufen lassen und von jedem char einen wert abziehen.....aber wie implementiert man das hier vernünftig?
-
Poste doch mal eine Schleife von 0 bis kleiner length.
-
int i; //Laufvariable for (i=0; i<lenght; i++){ }
-
int i; //Laufvariable for (i=0; i<lenght; i++){ *(message+i) += shift; // encode, bei decode -= }
-
Das ist jetzt mal der fertige Code...
Der compiler zeigt 0 errors 0 warnings - trotzdem schmiert das Programm ab - bitte um Hilfe bei der Fehlersuche....#include <stdio.h> #include <stdlib.h> // Needed for invocation of function strlen to compute length of a string #include <string.h> // Encodes an ASCII-message of a specific length by adding shift char *encode(char *message, int shift, int length) { int i; //Laufvariable for (i=0; i<length; i++){ *(message+i) += shift; // encode, bei decode -= } // IMPLEMENT ENCODE HERE! } // Decodes an ASCII-message of a specific length by subtracting shift char *decode(char *message, int shift, int length) { int i; //Laufvariable for (i=0; i<length; i++){ *(message+i) -= shift; // encode, bei decode -= } // IMPLEMENT DECODE HERE! } int main(void) { char input[2][100]; // CHANGE shift here until you get a meaningful decoded message int shift = 4; // Write encoded message into variable input[0] sprintf(input[0], "Kpl']hyphisl'j'pu'H|mnhil'8'oh{'klu'^ly{'<("); // Decode message with shift decode(input[0], shift, strlen(input[0])); printf("%s\n", input[0]); // Encode message sprintf(input[1], "Informatik ist cool!"); encode(input[1], shift, strlen(input[1])); printf("%s\n", input[1]); // Check reversibility of encode and decode functions printf("%s\n", encode(input[0], shift, strlen(input[0]))); printf("%s\n", decode(input[1], shift, strlen(input[1]))); return EXIT_SUCCESS; }
-
Eine Warnung das deine Funktionen einen Rückgabewert definiert haben aber keinen Wert zurückgeben sollte aber schon kommen.
Sonst mußt du den Warn-Level ändern!
Es fehlt einreturn message
in den Funktionen
-
Ich Trottel......ist ja klar das es dann nicht geht!
Wäre ja echt nett von der Funktion wenn sie nicht im Nirvana verschwindet!
Danke an alle die geholfen haben! Jetzt funzt das Teil!Meine Verzweiflung über die Informatik ist schon wieder ein klein wenig keiner geworden!