Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe Textverschlüsselung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.03.2005, 19:54 Uhr
seanyann



Moins ich hab ein problem ich versuche ein prog zu scheiben das ein text codieren kann und decodieren kann.Mit der methode encode bin ich schon so weit abeit decode klappt noch nicht so ganz.Hier ist das Programm

C++:
#include <cstdio>
#include <cctype>
#include <cstdlib>

/*
Das Zeichen ch verschluesseln
*/


char encode(char ch, int l);

/*
Das Zeichen ch entschluesseln
*/


char decode(char ch, int l);

const int N = '~' - ' ' + 1; /* Anzahl der druckbaren Zeichen */

int main(int argc, char* argv[])

/*
Die Datei argv[3] wird verschluesselt, der verschluesselte
Text wird in die Datei argv[4] geschrieben
*/


{
    FILE *ein, *aus;
    char c ;
    int mode, n, keyvalue;

    if (argc != 5) {
        printf("4 Parameter: mode key InFileNname OutFileName\n"); return 0;
    }

    if (argv[1][0]=='e') mode = 0; /* encode */
    else if (argv[1][0]=='d') mode = 1; /* decode */
    else {
        printf("Verschluesseln oder Entschluesseln ?\n"); return 0;
    }

    if (!(keyvalue = atoi(argv[2]))) { /* !!! */
        printf("keyvalue darf nicht negativ sein!\n"); return 0;
    }
    ein = fopen(argv[3], "r"); aus = fopen(argv[4], "w");
    srand(keyvalue);
    c = getc(ein);

    while (c != EOF ) {
        n = rand() % N;
        if (mode==0) c = encode(c, n); else c = decode(c, n);
        putc(c, aus); c = getc(ein);
    }
    fclose(ein); fclose(aus); return 0;
}

char encode(char ch, int l) {
    int n;
    if (isprint(ch)) {
        n = ch - ' ';
        n = (n + l) % N;
        ch = ' ' + n;
    }
return ch;
}


char decode(char ch, int l) {
    int n;
    if (isprint(ch)) {
        n = ch - ' ';
        n = (n - l)%N;
        ch = ' ' + n;
    }
return ch;
}


kann jemand mir nen vorschlag machen.
Danke im voraus.
seanyann


Bearbeitung von Pablo:

Benutze die CPP Tag selber!


Dieser Post wurde am 31.03.2005 um 20:08 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.03.2005, 22:32 Uhr
ao

(Operator)


Verrätst du auch, was das Problem ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.03.2005, 23:24 Uhr
seanyann



Hab ich doch schon gesagt es codiert wie ich das möchte aber decodieren kann es nicht.Ich habe auf nen zettel paar kontrete beispiel genommen und das geht.es muss irgendwas falsch in der methode decode sein...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.03.2005, 23:54 Uhr
0xdeadbeef
Gott
(Operator)


So gehts:

C++:
char decode(char ch, int l) {
  int n;
  if (isprint(ch)) {
    n = ch - ' ';
    n = (n - l) % N + N; /* -10 % 3 == -1 */
    ch = ' ' + n % N; /* wegen dem + N eben, sonst wird ' ' nicht richtig gemappt. */
  }
  return ch;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: