Programme en c

Résolu/Fermé
haddadmarc Messages postés 59 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 1 octobre 2012 - 17 déc. 2008 à 23:07
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 18 déc. 2008 à 00:37
Bonjour,
j'ai un petit probleme avec un programme en c.
ce programme utilise le chiffrement de cesar (decalage par substitution de 3 lettres)
je suis debutant en c mais je sais que je dois passer par une boucle (for) mais le probleme c'est que je n'y arrive pas
aidez moi s'il vous plait
merci

2 réponses

Wardog Messages postés 389 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 17 octobre 2009 159
17 déc. 2008 à 23:42
Bonsoir,

C'est très simple, tu parcours ta chaine jusqu'à la fin \0 en copiant chaque caractère dans une chaine mallocé en decalant le caractere de 3.

En gros sa donne,

char *str;
char *cesar;
char *temp;

str = "bonjour sa va";
cesar = malloc((strlen(str) + 1) * sizeof(*cesar));
temp = cesar;

while (*str != '\0')
{
*cesar = *str + 3;
cesar++;
str++;
}

*cesar = '\0';

printf("%s\n", str);
printf("%s\n", temp);
free(cesar);

Il faudra bien sûr gérer les cas spéciaux du genre X Y et Z pour qu'il reviennent sur A B et C.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
18 déc. 2008 à 00:37
Salut,
Le cas particulier est traité facilement par le modulo.
Par exemple :
#include <stdio.h>
#include <string.h>

#define DEC 3

int main(void){
    char mot[]="bonjour ca va";
    char *str=mot;

    for(int i=0;i<strlen(mot);i++){
        *str = (*str -'a' + DEC)% 26 + 'a';
        str++;
    }

    puts(mot);

    return 0;
}

Cdlt
0