IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Exercice chiffrement par substitution


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Exercice chiffrement par substitution
    Bonjour à tous, voila je bloque sur un exercice que je dois rendre sur le chiffrement par substitution.

    L'Exercice est simple, je dois remplacer chaque lettre d'un texte saisi par l'utilisateur et le remplacer par une lettre de substitution située dans un fichier cle.txt.
    (Ce fichier s'apparente à un tableau de deux colonnes avec en première colonne l'Alphabet et face a l'Alphabet la lettre à remplacer.)

    Je me suis cassé la tête sur la façon de faire mais en vain. Un petit coup de main ne serais pas de refus.
    Je vous joint ce que j'ai déjà codé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    #include <iostream>
    #include <string>
    #include <map>
    #include <iterator>
    #include <fstream>
    #include <algorithm>
     
     
     
    // Foncteur qui effectue un chiffrement par decalage
    class ChiffrementSubst{
     
    public:
     
     
      ChiffrementSubst(const std::string& nomFichier):nom_fichier(nomFichier),tableauCopy()
      {
          std::ifstream fichier(nom_fichier.c_str());
          while(fichier)
          {
              fichier>>cle;
              fichier>>valeur;
              tableauCopy[cle] = valeur;
     
          }
     
      }
     
     
      char operator ()(char lettre)
      {
          for(std::map<char,char>::iterator it = tableauCopy.begin();it != tableauCopy.end();++it)
              {
                  if(lettre == cle)
                  {
                      lettre = valeur;
                  }
     
     
                  return lettre;
     
              }
     
     
      }
     
     
     
    private:
     
        std::string nom_fichier;
        char cle, valeur;
        std::map<char,char>tableauCopy;
    };
     
     
    int main()
    {
      // Le message a crypter
      std::string texte("BIENVENUE SUR LE MOOC C++ D'OCR !!");
     
     
     
      std::cout << "Quel fichier contenant la cle voulez-vous utiliser ? ";
      std::string nomFichier;
      std::cin >> nomFichier;
     
     
      ChiffrementSubst foncteur(nomFichier);
     
      // Chaine de caracteres pour le message crypter
      std::string texte_crypte;
     
      transform(texte.begin(),texte.end(),texte_crypte.begin(),foncteur);
     
      std::cout<<texte_crypte<<std::endl;
     
     
      return 0;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    y'as de l'idée, mais en l'état ton code ne devrait même pas compiler, ou émettre un sacré warning.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     char operator ()(char lettre)
      {
          for(std::map<char,char>::iterator it = tableauCopy.begin();it != tableauCopy.end();++it)
              {
                  if(lettre == cle)
                  {
                      lettre = valeur;
                  }
     
     
                  return lettre;
     
              }
     
     
      }
    Sais-tu lire cette fonction ? Pour chaque lettre du dictionnaire, si la lettre du dico est celle demandée, tu la remplaces, puis dans tous les cas tu retournes la lettre.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Je te remercie Bousk mais c'est vrai que la je bloque totalement sur la manière de faire pour appliquer mon changement à mon nouveau tableau tableaucopy
    Une petite aide ne serait pas de refus

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Mai 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Mai 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Erreur: no matchfor call
    Bonour tout le monde, voila je suis sur un exercice ou je dois crypter un texte donné par l'utilisateur, par un caractère de substitution stocké dans un fichier cle.txt
    Mais quans je souhaite compiler mon programme celui-ci me renvoi: No match for call to (chiffementSubst) ()...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    #include <iostream>
    #include <string>
    #include <map>
    #include <iterator>
    #include <fstream>
    #include <algorithm>
     
     
    class ChiffrementSubst{
     
    public:
     
     
      ChiffrementSubst(const std::string& nomFichier):nom_fichier(nomFichier),tableauCopy()
      {
          std::ifstream fichier(nom_fichier);
          std::istream_iterator<char,char> it(fichier);
          std::istream_iterator<char,char>fin;
          copy(it,fin,tableauCopy.begin());
      }
     
     
      char operator ()(char lettre)
      {
          std::map<char,char>::iterator trouve = tableauCopy.find(lettre);
     
          if(trouve == tableauCopy.end())
          {
              std::cout<<"Le caractere n'est pas trouvable"<<std::endl;
          }
          else
          {
              lettre = trouve->second;
              return lettre;
          }
      }
     
     
     
     
    private:
     
        std::string nom_fichier;
        std::map<char,char>tableauCopy;
    };
     
     
    int main()
    {
      // Le message a crypter
      std::string texte("BIENVENUE SUR LE MOOC C++ D'OCR !!");
     
     
      // Demande de la cle a l'utilisateur
      std::cout << "Quel fichier contenant la cle voulez-vous utiliser ? ";
      std::string nomFichier;
      std::cin >> nomFichier;
     
     
      ChiffrementSubst foncteur(nomFichier);
     
      std::string texte_crypte;
     
      transform(texte.begin(),texte.end(),texte_crypte.begin(),foncteur());
     
      std::cout<<texte_crypte<<std::endl;
     
     
      return 0;
    }
    Merci encore pour votre future aide, j'apprends seul et j'avoue bloquer de temps en temps

  5. #5
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    L'algorithme attend en dernier paramètre un "callable", comme par exemple une instance de foncteur. L'erreur semble pourtant claire, on doit donc utiliser à cet endroit un constructeur avec ses paramètres ou une instance.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ce code ne devrait pas plus compiler que le précédent parce que l'operator peut ne rien retourner...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Chiffrement par substitution
    Par alexandrempg dans le forum C++
    Réponses: 21
    Dernier message: 26/11/2016, 15h06
  2. [Turbo Pascal] Chiffrement par décalage (chiffre de César)
    Par tessafadel10 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 14/06/2010, 22h43
  3. piratage par substitution de fichier .js
    Par mapmip dans le forum Sécurité
    Réponses: 7
    Dernier message: 25/11/2009, 10h10
  4. Suppression de caractères par substitution
    Par abirihabibi dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2008, 00h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo