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 :

problème pour faire un codage


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut problème pour faire un codage
    Bonsoir,

    j'ai un petit problème, à savoir, je suis bloqué dans mon programme, je ne sais pas comment faire pour comparer un caractère d'un tableau avec un autre...

    Apparemment strcmp ne permet de le faire, j'aimerai à partir d'une saisie réussir à obtenir un codage (cf. int cod[26])

    Si il y a un autre moyen (sans pointeur)je suis preneur.

    J'espère avoir était assez clair pour exposé mon problème.
    Voilà le code qui illustrera mes propos:
    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
     
    #include<stdio.h>
    #include<string.h>
     
     
    main()
    {
    char lettre[26] ="abcdefghijklmnopqrstuvwxyz";
    int cod[26] ={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};
    char saisie[100];
    int nbre;
    int i;
     
    scanf("%s", saisie);
    nbre= strlen (saisie);
     
    printf("%d",strcmp (saisie[1], lettre[1])//ceci est un test, mais qui me créé une erreur de compil
    for (i=1; i<nbre;i++)
    	{
     
    	}
     
    }

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    C'est pas courant ! D'habitude, c'est plutôt l'inverse qui pose problème aux programmeurs C débutants. :-)

    Et ça devrait être bon.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Ah ben merci Obsidian, pourquoi faire compliqué quand on peut faire simple?!

    Cela dit je n'y avais pas pensé

    Après un sudo apt-get install cerveau, ça devrait marcher...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Par défaut
    Euh, un autre problème pour garder la forme?

    maintenant j'ai un core dumped à l'exécution que je détecte pas vraiment, si quelqu'un peut me dire ou je me trompe!

    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
     
    #include<stdio.h>
    #include<string.h>
     
     
    main()
    {
    char lettre[26] ="abcdefghijklmnopqrstuvwxyz";
    int cod[26] ={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};
    char saisie[100];
    int nbre;
    int i;
    int j,k =0;
     
    gets(saisie);
    nbre= strlen (saisie);
    for (i=1; i<nbre;i++)
    	{for(j=0; j<26;j++)
    	{while(saisie[j]!=lettre[k])
    	{
    	k++;
    	}
    	printf("%d",cod[k]);
    	}
    	}
    }

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le problème vient d'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (i=1; i<nbre;i++)
        {
            for(j=0; j<26;j++)
            {
                while(saisie[j]!=lettre[k])
                {
                    k++;
                }
            printf("%d",cod[k]);
        }
    }
    K n'est jamais remis à zero
    saisie[j] pose problème : rien ne garanti qu'on ai rentré 26 caractères...

    une version commentée :
    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
     
    #include<stdio.h>
    #include<string.h>
     
    /* main est de type int */
    int main(void)
    {
        /* attention, en général, lorsqu'on alloue et initialise un tableau de 
            caractères, il faut réserver une place pour le '\0' final :
            char foo[3+1] = "abc";
            ou mieux :
            chor bar[] = "def"; */
        char lettre[26] = "abcdefghijklmnopqrstuvwxyz";
        int cod[26] =
            {  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 };
        char saisie[100];
        int nbre;
        int i, j;
     
        /* gets est une fonction déconseillée, utiliser fgets plutot 
           le problème de fgets est qu'un '\n' sera ajouté à la fin. */
        fgets(saisie, sizeof saisie, stdin);
        nbre = strlen(saisie);
     
        for (i = 0; i < nbre; i++) {
            for (j = 0; j < 26; j++) {
                /* attention, saisie[j] peut porter n'importe où */
                if (saisie[i] == lettre[j]) {
                    break;
                }
            }
            if(j == 26) {
                /* caractère pas trouvé */
                printf("?.");
            } else {
                /* on écrit le code */
                printf("%d.", cod[j]);
            }
        }
        /* main de type int, retourne donc quelquechose chose.*/
        return 0;
    }
    qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >echo hello | ./a.exe
    8.5.12.12.15.?.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Tu t'es emmêlé les indices. Tu boucle avec i sur la taille de la saisie, mais tu utilise j dans ta comparaison. En plus, i devrait commencer à 0. Ensuite, tu fais une première boucle sur j pour ton alphabet, mais tu refais une troisième boucle sur k, sur laquelle tu n'as aucune vérification.

    Tu as une triple boucle, alors qu'une double devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for (i=0; i<nbre;i++)
    {
       j=0;
       while((j<26)&&(saisie[i]!=lettre[j])){
          ++j;
       }
       if(j<26){
    	   printf("%d",cod[j]);
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème pour faire un insert avec une image
    Par vbcasimir dans le forum Modules
    Réponses: 3
    Dernier message: 02/11/2005, 09h21
  2. Réponses: 5
    Dernier message: 24/09/2005, 20h31
  3. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13
  4. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 16h51
  5. [FLASH MX2004] Problème pour faire un bouton play
    Par melanie075 dans le forum Flash
    Réponses: 13
    Dernier message: 16/12/2004, 22h55

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