htmldu59
Messages postés9Date d'inscriptionsamedi 6 juin 2015StatutMembreDernière intervention19 janvier 2017
-
Modifié par cptpingu le 20/12/2016 à 22:59
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 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)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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:
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");
}
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