Rot13 und seine kapute Text eingabe.......



  • Hallo,
    Ich habe hier so ein kleines Programm geschrieben und naja es geht ja auch MEHR ODER WENIGER......

    Ich habe ein Program gecodet das einen text entgegennimmt und ihn im ROT13 CODE wiedergibt (ihr wisst schon die alte SCHEFRIERUNG die in Kriegen benutzt worden war.....)!
    Aber da gibt es ein problem mit dem char array! wenn ich z.B einen Namen:
    'Peter' wird er umgewandelt und alles ist perfekt! aber wenn ich gleich zwei namen eingebe z.B: Peter paul wird nur peter umgewandelt und paul verschwindet....... das liegt sicher am leerzeichen! aber wie kann ich das Programm schreiben das es alles umwandelt was da reingeschrieben wird und nicht alles was vor dem Leerzeichen ist...!

    Bitte Helft mir hier ist auch der CODE das Programms:

    //rot13.cpp - Das Programm das den eingegebenen Text in ROT13-CODE umwandelt
    //			  und es wieder in den normalen Text verwandelt!!!!
    
    #include <iostream.h>
    #include <string.h>
    
    void rot13(char *pCode);
    
    void main()
    {
    	char text[500];
    
    	cout << "Geben sie den Text ein der in ROT13 umgewandelt werden soll:\n";
    	cin >> text;
    
    	cout << "-------------------------------------------------------------\n"
    		 << "Hier der umgewandelte Text in ROT13 :\n";
    
    		 rot13(text);
    
    	cout << "\n\n";
    
    	cout << "-------------------------------------------------------------\n"
    		 << "Hier nochmal der original Text :\n"
    		 << text
    		 << "\n";	
    
    }
    
    void rot13(char *pCode)
    {
    	char code[500];
    
    	strncpy(code, pCode, sizeof code);
    	code[sizeof code - 1] = '\0';
    
    	char *pCode2 = code;
    
    	for (int i = 0; pCode2[i] != '\0' ; i++)
    	{
    		pCode2[i] += 13;
    	}
    
    	cout << code;
    
    }
    


  • Anonumous schrieb:

    for (int i = 0; pCode2[i] != '\0' ; i++)
    	{
    		pCode2[i] += 13;
    	}
    

    Das ist aber kein Rot13, eher ein Add13. Da müsste der Wert noch modulo 26 genommen werden. Schau auch mal hier: http://www.c-plusplus.net/forum/viewtopic.php?p=318829
    Und wieso nimmst du nicht std::string?



  • Kann es sein das durch deine provate rot13 codierung irgendwelche Nicht druckbare Zeichen erzeugt werde, die durch
    cout abbrechen lassen.

    Du codierst hier nichtr die Buchstaben 1 bis 26 sondern Characters in einem String, du musst auch sicherstellen das die Zeichen im zulössigne Bereich bleiben.

    Bei der Lösung von \Aleph_0 geht er davon aus das das der Buchstabe "A" bereits durch 0 und "Z" durch 26 codiert ist. somit müssten alle kleinen Buchstaben vorher in Uppercase umgewandelt werden.

    Denk noch mal über den Codierungsalgorythmus nach 🙂



  • Das löst doch aber nicht mein Problem..... Wie bekommt ich mein Programm dazu das es den gesammten text einliest!!!!
    und nicht nur das erste Wort.....????



  • getline()

    aber dein rot13 algo ist trotzdem kaputt



  • Also den ROT13 algo werde ich ja noch verändern aber zuerst ist das das wichtigste.....!

    Könntest du mir auch nich aufschreiben wie man getline() benutzt....!!! Bitte



  • es gibt 2 versionen von getline:
    cin.getline(char const*, size_t);
    und
    getline(string&,cin);

    such mal in deiner doku danach.


Anmelden zum Antworten