Ce programme implémente un petit algorithme de cryptage que j'ai mis au point il ya de ça quelques années.
On prend par exemple la chaîne 'Bonjour'
Le programme va parcourir la chaîne, lettre par lettre. Prenons l'exemple de 'B' :
Imaginons que B s'écrive en binaire 01100100
Comme c'est la première lettre, on va inverser le premier bit :
01100100 > 11100100
Pour 'o', comme c'est la deuxième lettre, on va inverser le deux premiers ; pour 'n', les trois premiers, et ainsi de suite...
Il ne prend pas de clé utilisateurs, et comme le principe est le même pour le codage comme le décodage, entrer une chaîne codée va la décoder, et vice-versa.
Conclusion :
Le principale désavantage de ce programme est son originalité... Comme il n'y a pas besoin de clé, la même chaîne codée n'importe quand et n'importe où donnera exactement la même chaîne codée.
MAJ : Maintenant, ça lit un fichier et l'encode directement. Il suffit de spécifier son chemin.
Les commentaires sont les bienvenus.
Autre petite remarque je ne sais pas si le fait de reecrire la fichier plutot que d'en creer un autre soit une tres bonne chose, c'est un coup a perdre des donnees ca.
Sinon l'algo est plutot bien pense et le code bien commente, c'est cool :)
-s
aux options de compilation, j'ai appris ça sur cppfrance, je sais plus qui m'a dit que ça permettait au compilo de transférer au lieur tout ce qu'il ne connaissait pas, et que comme ça ce qui n'est pas utilisé n'est pas compilé. en général ça réduit la taille du fichier exe de moitié.
essayes de faire ça avec VC++, il doit bien y avoir un champ "options de compilation" ds les options du projet.
Je ne sais pas si mettre l'exe compilé est avantageux, étant donné qu'à lui seul il fait 520ko... Si ça gêne vraiment certains, postez un commentaire.
Essayer avec le fichier test.txt
Un grand merci à Kiruaet à djl.
Je tiens à remarquer qu'avec printf et scanf, le programme fonctionne tout à fait correctement (je ne l'ai pas mis sur le site), le seul ennui c'est que j'utilise une variable char sOrg[256], donc on ne peut pas taper plus de 255 caractères (+1 pour le nul).
Je vais voir pour les fichiers, essayer d'améliorer le code et le cas échéant mettre à jour la source.
A+
Saros
iostream
fstream
istringstream
string
...
à côté de ça tu as aussi la STL (Standard Template Library):
vector
deque
stack
list
map
.............. et un tas d'autres
ces librairies sont les standards du C++, il est bon de les utiliser pour favoriser l'uniformisation des codes. Printf, Scanf, ... tout ça c'est la lib standard du C, c'est dommage de les utiliser quand on fait du beau code C++ tout propre, ça casse un peu l'ambiance je trouve ;-)
en fait, pour utiliser cin, cout ... tu mets tjs ça:
#include
using namespace std; //cette ligne indique que par défaut, quand tu utilises un objet, il fait partie de l'espace de nom std, ça évite de tapper ça:
std::cout << ...
:: est l'opérateur de résolution de portée, mais c'est lourd à écrire alors...
une remarque par rapport au code que j'ai tappé ds le msg précédent: le caractère NULL (0) a sauté à cause de l'anti-slash (il est temps que ce bug soit fixé), évidemment, le dernier paramètre de getline est: '"ANTISLASH"0'
cplusplus est un excellent site, je ne peux plus m'en passer, et faut vrmnt que les gens utilisent les libs standards, parce que sinon, c'est plus un standanrd, sgnif :-( si tlm utilise sa lib, ça devient impossible de lire les codes sources des autres, même si c'est partout du C++, on s'y retrouve plus.
une note par rapport à ton programme plus directement:
je pense qu'un programme d'encodage devrait surtout coder/décoder des fichiers, plutôt que de demander à l'utilisateur de tapper son message. Moi je te propose de te renseigner sur cplusplus.com sur l'utilisation de <fstream> pour les flux de fichiers.
ça aura plusieurs avantages directs:
- tu restes ds le beau et pur C++ ;-)
- tu peux déterminer la taille du fichier, donc tu ne dois plus demander à l'utilisateur de savoir combien de caractères il y a dans son texte (à ce sujet, en haut je me suis trompé: c'est LONGUEUR+1, il faut de la place pour le caractère nul)
- l'utilisateur ne doit pas tapper son texte, surtout s'il s'agit de décryptage ça devient horrible de tapper Ç si on sait pas à quel code ASCII ça correspond
- plus de problème de flux arrêté à l'espace, mais remarque que les flux de fichiers avec la STD sont très semblables aux flux vers/de la console, ainsi:
cin >> variable;
mais aussi:
fichier >> variable;
donc tu devras qd même utiliser getline, en calculant d'abord la taille du fichier (avec les méthodes de déplacement de la "tête de lecture" du fichier, tout est expliqué sur cplusplus.com)
bien à toi
Kirua
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.