C++: Strings, Arrays, Operatoren

Odin

Grünschnabel
Hallo Leute,
ich habe in Informatik ein Übungsblatt bekommen. Bis auf eine Aufgabe hab ich auch alle geschafft, nur bei einer hakt es ein bischen. Abgesehen davon, das ich garnicht so recht weis was der Prof. von mir will, weis ich nicht wo ich ansetzen soll um das Problem zu lösen. Unter "ihre Lösung" hab ich jeweils schon ein paar Ansätze versucht. Hier ist die Aufgabenstellung:

Wir betrachten den folgenden, einfachen Verschlüsselungsalgorithmus:
Eingabe: Zu verschlüsselnde Zeichenkette text, Passwort key
Ausgabe: Verschlüsselte Zeichenkette result.
Algorithm. Idee: Wandle jedes Zeichen text[i] mit Hilfe einer bitweisen, exklusiven Oder-Operation (^in C++) um, bei der das Zeichen text[i] verknüpft wird mit dem Passwort-Zeichen key[i]. Falls i die Länge von key überschreitet, dann wird zyklisch der Anfang von key durchlaufen.
Implementieren Sie den Algorithmus in einer seperaten Funktion
string encrypt (string text, string key)
und verschlüsseln Sie die vorgegebene Zeichenkette text mit Hilfe des vorgegebenen Passwortes key.
Hinweis: Schauen Sie sich die Definition der string-Klasse an, z.B. unter http://www.cplusplus.com/reference/string, insbesondere die Funktion length(), mit der die Länge eines Strings ermittelt werden kann.
Ebenso nützlich ist der (überladene) Operator "+", mit dem mehrere String-Objekte aneinandergefügt ("konkateniert") werden können (http://www.cplusplus.com/reference/string/operator+.html)

Und hier ist das Grundgerüst, was gegeben ist:

C++:
#include <iostream>
#include <string>

using namespace std;

int i;

string encrypt(string text, string key)
{
	string result;
	
	//Ihre Loesung


	return result;
}

/** Hier beginnt das Hauptprogramm */
int main(int argc, char* argv[])
{
	string text = "Dies ist irgendein Text.";
	string key  =  "irgendein Passwort";
			
	//Ihre Loesung
    for (i=0; i<text.length(); i++) {
        int b = (text[i] ^ key[i]);
        cout << b;
    }
		
	return 0;
}
 
Hallo,

wo genau ist denn jetzt das Problem? Die Aufgabenstellung beschreibt meiner Meinung nach recht genau was zu tun ist: den String text Zeichen für Zeichen ablaufen, mit dem XOR-Operator ^ verschlüsseln und an result anhängen. Oder aber auch result erst auf die richtige Größe bringen (string::resize) und dann die verschlüsselten Zeichen direkt an die richtige Stelle schreiben. Wenn du mehr zum Verfahren wissen willst, kannst du ja mal nach „XOR Verschlüsselung“ suchen.

Grüße,
Matthias
 
Die Aufgabenstellung verstehe ich schon. Nur weis ich nicht so ganz, wie ich Den text mit dem key verschlssel. Wenn ich das mit dem "^" Operator mache, kommen da nur Zahlen raus, aber ich denke mal da Sollen Buchstaben rauskommen! Eben das Wort von key für das Wort von text.
 
Ok ich hab das jetzt glaub ich soweit hinbekommen, das der text mit dem key verschlüsselt wird:

C++:
#include <iostream>
#include <string>

using namespace std;

int i;
int *x = new int ();
int *y = new int();

string encrypt(string text, string key)
{
	string result;
	
	//Ihre Loesung
	result = text [i] ^ key [i];
    
	
	return result;
}

int b;

/** Hier beginnt das Hauptprogramm */
int main(int argc, char* argv[])
{
	string text = "Dies ist irgendein Text.";
	string key  =  "irgendein Passwort";
			
	//Ihre Loesung
    for (i=0; i<text.length(); i++) {
        string encrypt();
        cout << key[i];
    }
		
	return 0;
}

Allerdings, wenn der text länger ist als der key, muss der mit dem key ja wieder von vorne anfangen. also beit text "123456" und key "abcd" muss ja
1234567
abcdabc
rauskommen. Bist jetzt kommt bei mir aber nur sozusagen:
1234567
abcd
raus. (Das ist ein Bsp, übertragen auf die Aufgabe)
Kann mir einer sagen, wie das geht?
 
Zuletzt bearbeitet:
Hi Odin, kannst du mir für die nächsten aufgaben helfen?
ich meine, für die Html und swap etwas so.
es wäre sehr nett.
 
Ja, schon, aber deswegen sind wir auch kein Hausaufgabenforum, aber was solls.

@Odin: Klar, wenn du das so machen willst, kannst du den modulo-Operator (%) verwenden.
Code:
i=i%(sizeof(key)/sizeof(key[0]));
Beispiel: i=8, wir haben aber nur 5 keys. 8%5==3, somit wird i zu 3. Er fängt also immer wieder vorne an.


Gruß,

badday
 
Zuletzt bearbeitet:
Ok Badday , ich habe ein problem und ich suche eine lösung, wenn jemand mir helfen willst, wäre es gut, welches problem hast du damit?
 
Hm? Ich habe doch Odio einen Ansatz geliefert, wo ist nun das Problem?
Solange Fragen zu Hausaufgaben spezifisch sind und schon ein Ansatz vorhanden ist (sprich Eigentleistung erkennbar), habe ich gar kein Problem damit ;) (War hier auch der Fall, daher nehme ich die Bemerkung zurück, ok ;) )
 
Zurück