Lösungssuche für C-Problem

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Lösungssuche für C-Problem

      Vorweg sei gesagt, dass ich ein Anfänger im Bereich Programmieren bin...

      Ich soll ein Programm in C schreiben, das eine Textdatei 'verschlüsselt, indem jeder Buchstabe um einen im Code festgelegten Wert im Alphabet verschoben wird.

      Das heißt zum
      Beispiel für eine Verschiebung um 5 für das Wort "Atom" eine Verschlüsselung
      nach "Fytr".


      Nur fehlt mir ehrlich gesagt ein relativ einfacher und logischer Ansatz für das Problem.

      Gruß
    • mh ne tabelle anlegen, wo drin steht, was jeder verschlüsselte buchstabe entschlüsselt ist und dann mit ner while schleife jeden char im array durchgehen und entschlüsselt.

      würd ich jetzt mal mit meinem halbwissen so sagen ^^
      falls richtig, freirunde
    • Hm, nen Array zu bauen, (256), in dem bei den gegeben Stellen die int für die gecrypteten Chars sind sollt eigentlich klappen. char -> int vorher nicht vergessen :)

      Wir haben 100 Hacker und Hacksen gefragt: "Was die schrecklichste Programmiersprache, in der du je programmiert hast?"
      1. Java
      2. PHP
      3. Visual Basic
      4. BASIC
    • Der Text muss eingelesen werden als Array. Dann muss jeder Buchstabe als Zahl definiert sein. a = 1, b = 2 etc. Dann jede Zahl mit einem entsprechenden Wert addieren (%26) und dann Zahlen zu Buchstaben zurück. Mit Case und Switch und schleife arbeiten oder Caesar Schiffrierung in google suchen.
    • ich würde datei einlesen, verschlüsseln, in eine andere datei schreiben, und die alte löschen, die neue so wie die alte nennen...
      wobei du vl nur schrittweise einlesen solltest, um nicht zu viel speicher zu verbrauchen

      edit: oder komplett einlesen => verschlüsseln => selbe datei im modus w+ öffnen(überschreibt die vorige)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Sekkiy ()

      Every base is base 10.
    • Addieren ist nen netter Versuch, aber klappt nicht besonders, wenn du z hast ;)

      Wir haben 100 Hacker und Hacksen gefragt: "Was die schrecklichste Programmiersprache, in der du je programmiert hast?"
      1. Java
      2. PHP
      3. Visual Basic
      4. BASIC
    • das prinzip ist mir schon klar, mir geht es eher um die praktische umsetzung... wie gesagt ich hab noch nicht viel erfahrung

      wenn ich also eine datei lade, dann zeichen für zeichen vorarbeiten oder kann man direkt alle A in zb F umwandeln .... und wie lade ich den inhalt einer textdatei in ein array
    • Musst vielleicht die Loops etwas umschreiben, aber das Prinzip sollte klar sein.

      Quellcode

      1. #!/usr/bin/env ruby
      2. MAP = Array.new(26) {|i| (i + 3) % 26 + 65 } # 64 für A
      3. puts STDIN.read. # Liest STDIN ein
      4. each_byte. # Jedes byte (vllt. musst noch nen cast machen)
      5. map { |byte| # Interation über alle Bytes
      6. case byte
      7. when (65..90)
      8. MAP[byte - 65].chr # 65 abziehen so dass A 0 ist
      9. when (97..122)
      10. (MAP[byte - 97] + 32).chr # same für a
      11. else
      12. byte.chr # sonst einfach wieder zurück
      13. end
      14. }.join('') # und wieder joinen. Kannst du vermutlich weglassen und im Block vorher direkt printen
      Alles anzeigen

      Wir haben 100 Hacker und Hacksen gefragt: "Was die schrecklichste Programmiersprache, in der du je programmiert hast?"
      1. Java
      2. PHP
      3. Visual Basic
      4. BASIC
    • Sekkiy schrieb:

      ich weiß ja nicht wie es in C ist, aber kann man nicht einen Char in int casten(den ascii wert bekommen), +5 addieren und dann wieder auf char casten?
      genauso macht man es. Das ist ja gerade der Vorteil von C, dass man leicht die Datenformate wechseln kann. Da braucht man auch keine sinnlosen Zuweisungen, Arrays, Switch-Anweisungen oder was auch immer. Stichwort: Zeichenweises Einlesen, dann +5, und dann zeichenweises Schreiben in neue Datei (oder was auch immer gefordert ist). Kann aber sein, dass man für den Übergang ab Z-A bzw. z-a noch ein paar Sonderfälle programmieren muss (Stichwort: 26 subtrahieren) sowie alles was nicht Buchstaben sind, auslassen muss (Range der Buchstaben nach ASCII beachten)

      z.B. etwa so:

      Quellcode

      1. char Zeichen; //eingelesenes Zeichen
      2. int buffer;
      3. FILE *stream; //für eingelesene Datei
      4. FILE *stream2; //für neue Datei
      5. char[100] Filename="C:\\TEMP\\test.txt";
      6. [...]
      7. stream2 = fopen( Filename, "a" );
      8. fprintf(stream2,"%c",buffer);
      9. [...]

      das %c verwandelt den Int-Wert direkt in einen String Wert (nach ASCII). kA obs 100% stimmt, aber Prinzip sollte klar sein.


      Array und was weiß ich ist vollkommener Overkill und war hier auch mit Sicherheit nicht gefragt. Außerdem war nach C gefragt, also kommt hier nicht mit C++ oder Ruby Code an... .

      de.wikibooks.org/wiki/C-Progra…Einfache_Ein-_und_Ausgabe
      bzw: de.wikibooks.org/wiki/C-Programmierung:_Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von calcu ()

    • Mir ist gerade noch eingefallen, dass es Vala gibt - Kannst du nach C übersetzen lassen und musst trotzdem nicht auf objektorientiertes Programmieren verzichten ;)

      Wir haben 100 Hacker und Hacksen gefragt: "Was die schrecklichste Programmiersprache, in der du je programmiert hast?"
      1. Java
      2. PHP
      3. Visual Basic
      4. BASIC