Algorithme de chiffrement

Résolu
htmldu59 Messages postés 9 Date d'inscription samedi 6 juin 2015 Statut Membre Dernière intervention 19 janvier 2017 - Modifié par cptpingu le 20/12/2016 à 22:59
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 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.

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 déc. 2016 à 23:33
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.

0
htmldu59 Messages postés 9 Date d'inscription samedi 6 juin 2015 Statut Membre Dernière intervention 19 janvier 2017
Modifié par cptpingu le 21/12/2016 à 00:32
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");
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 21/12/2016 à 00:51
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
0
Rejoignez-nous