Algorithme de chiffrement [Résolu]

htmldu59 9 Messages postés samedi 6 juin 2015Date d'inscription 19 janvier 2017 Dernière intervention - 20 déc. 2016 à 20:52 - Dernière réponse : cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention
- 21 déc. 2016 à 00:50
Bonsoir tout le monde,

J'ai un programme à faire et cela consiste à chiffrer un texte tapé plus tôt.
Le chiffrement est le suivant : par exemple, la lettre A se change en 5 / la lettre B se change en 3 ...
Je pense qu'il faut utiliser un pointeur qui me permettra de tester chaque lettre avec un if et s'il détecte une lettre à modifier, il l'a change.

Pour le moment, j'ai mis ça :

int compteur = 0;
char lettre[0];
char* pointeur;
pointeur = strstr(tableau,lettre);

for (compteur = 0; tableau[compteur] != 0; compteur++)
{
  if (pointeur == "O") pointeur = "0";
  if (pointeur == "I") pointeur = "1";
  if (pointeur == "Z") pointeur = "2";
  if (pointeur == "E") pointeur = "3";
  if (pointeur == "A") pointeur = "4";
  if (pointeur == "S") pointeur = "5";
  if (pointeur == "T") pointeur = "6";
  if (pointeur == "B") pointeur = "7";
  if (pointeur == "G") pointeur = "8";
}

std::cout << "Voici le message chiffre: " << tableau << std::endl;


Mais peut importe le texte entré, il ne le modifie pas, on dirait qu'il ne rentre pas dans la boucle.Pouvez-vous me donner des pistes pour m'indiquer là ou j'ai tort (je pense que le "lettre[0]" gêne)

Merci d'avance à vous pour vos réponses.
Afficher la suite 

3 réponses

Répondre au sujet
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 déc. 2016 à 23:33
0
Utile
Bonjour.

Attention, tout d'abord, "crypter" ne veut rien dire. Tu veux sûrement parler de "chiffrer" (voir: https://chiffrer.info/). J'ai donc édité ton message en ce sens.
Je t'ai aussi ajouté la coloration syntaxique via les balises de code. Merci d'y penser la prochaine fois.

Ensuite, pour pouvoir t'aider il faudra clarifier ton sujet (est-ce un "chiffrement de César" que tu essaies de faire ?) ou un simple "mapping" (associer une lettre et un chiffre sans logique apparente). Si c'est un mapping (une association en français :p), peux-tu le fournir entièrement ?
Il faudrait aussi que tu précises si tu fais du C ou du C++. Le std::cout semble indiquer que tu fais du C++, mais tu utilises des notions de C... C'est très bizarre. Le C et le C++ sont deux langages différents qui ont une petite base commune, mais le C++ c'est pas "du C avec des choses en plus". Soit tu pars sur du C, soit du C++ et ça sera très très différent.
Enfin, tu postes un code, ce qui est très bien, mais il n'est pas complet ce qui rend difficile toute tentative de correction :(.

De ce que je vois, tu mélanges plein de notions que tu ne maîtrises pas et tu t'embrouilles complètement. Le petit morceau de code que tu fournis n'a ni queue ni tête techniquement (je peux comprendre la logique que tu essaies d'appliquer, mais ce que tu as écrit ne le reflète pas).

Pour résumer, voici ce dont j'ai besoin pour t'aider:
  • Clarification du sujet
  • C ou C++ ?
  • Poste ton code en entier.

Commenter la réponse de cptpingu
htmldu59 9 Messages postés samedi 6 juin 2015Date d'inscription 19 janvier 2017 Dernière intervention - Modifié par cptpingu le 21/12/2016 à 00:32
0
Utile
Merci pour ta réponse assez claire :) .

Pour répondre a tes questions dans l'ordre :
- crypter est juste un nom que j'ai donné mais en gros, je dois remplacer une lettre dans une chaine de caractere par un chiffre avec des règles de remplacement que j'ai défini (c'est pour cela les if : si un Z est dans la chaine, je le remplace par un 2)
- le langage que je suis censé utilisé est le C++ mais dans ma consigne j'ai le droit d'utiliser des fonctions de C comme strstr ou strcpy
- je ne peux pas vous donner le code complet car il est beaucoup trop long (8 exercices dans le meme programme)
Tout ce que je peux vous dire, c'est que le texte que je tape ou départ se met dans 2 tableaux : tableau et tableauModif.

void CIhmTableauCar::cryptageCerveau()
{
    system ("cls");
    int compteur=0;
    char lettre[0];
    char* pointeur;
    pointeur = strstr(tabCarModif,lettre);
    for (compteur=0; tabCarModif[compteur]!=0; compteur++)
    {
        if (pointeur == "O") pointeur = "0";
        if (pointeur == "I") pointeur = "1";
        if (pointeur == "Z") pointeur = "2";
        if (pointeur == "E") pointeur = "3";
        if (pointeur == "A") pointeur = "4";
        if (pointeur == "S") pointeur = "5";
        if (pointeur == "T") pointeur = "6";
        if (pointeur == "B") pointeur = "7";
        if (pointeur == "G") pointeur = "8";
}
    cout << "Voici le message crypte : " <<tabCarModif<<endl;
    system("pause");
}
Commenter la réponse de htmldu59
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par cptpingu le 21/12/2016 à 00:51
0
Utile
Quelques remarques:
  • Si c'est du C++ les fonctions du C sont peu utiles...
  • Utiliser une classe dans ce contexte me paraît suspicieux, mais on va faire avec.
  • Évite les "using namespace std;", c'est franchement "crade", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
  • Un attribut de classe est généralement différencié des autres variables locales par un préfixe (exemple: _). Donc ton attribut tabCarModif, devrait plutôt se nommer _tabCarModif, par convention.
  • Les "system" c'est très moche et pas portable du tout :).
  • chiffrementCerveau est un nom plus approprié. Cryptage ne veut rien dire.
  • Enfin, je t'ai encore ajouté les balises de code dans ton précédent message. C'est la dernière fois, si tu ne fais pas l'effort de les mettre, je ne ferais pas l'effort de te répondre...


En C++, les chaînes de caractères ne se font pas directement avec des tableaux, des pointeurs ou je ne sais quoi. On utilise tout simplement des std::string.
Ne pas confondre une chaine "toto" et un caractère 't' (tu noteras l'emploi de simple ou double guillemets).

Voici un petit exemple:
std::string str = "Coucou";
str[0] = 'P';
str[3] = 'p';
str[5] = '7';
std::cout << str << " de taille " << str.size() << ", première lettre: " << str[0] << std::endl; // Affichera: Poupo7 de taille 6, première lettre: P



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu

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.