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 :

Rechercher indice dans un tableau de chaine de caractère


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut Rechercher indice dans un tableau de chaine de caractère
    Bonjour à tous,

    J'ai une question à vous poser : je suis en train de faire un programme basic qui recherche l'indice d'un élément dans un tableau de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        char* Registre[32]={ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8",
        "R9", "R10", "R11", "R12", "R13", "R14", "R15", "R16", "R17", "R18", "R19",
        "R20", "R21", "R22", "R23", "R24", "R25", "R26", "R27," "R28", "R29", "R30",
        "R31"};
    Le programme que j'ai écris est celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int RechercheIndice (char*tab,char *ch){
        int indice=0;
        while (*tab!='\0'){
            if (*(tab+indice)==*ch){
                return indice;
            }
            indice++;
        }
        return -1;
    }
    Mais le problème c'est que ça affiche toujours 0
    Si quelqu'un peut me dépanner, ce serait sympa de votre part.
    Merci de votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 52
    Points
    52
    Par défaut
    Pour comparer deux chaîne de caractère on utilise strcmp et non == qui est l'adresse de la chaîne.

  3. #3
    Membre confirmé Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Points : 515
    Points
    515
    Par défaut
    Bonjour,

    Plusieurs erreurs dans ton code :
    1) Une petite d'erreur d'initialisation de ta chaine Registre : R27 qui inclue la virgule
    2) pour comparer des chaines : utilises la fonction strcmp qui rend 0 si deux chaines sont identiques.
    3) Pour faire une boucle sur ta fonction : mieux vaut lui passer sa taille.
    4) un tableau de char* a pour type char**

    Exemple de code :
    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
     
    #include <stdio.h>
     
    int main(){
     
      char* Registre[32]={ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8",
        "R9", "R10", "R11", "R12", "R13", "R14", "R15", "R16", "R17", "R18", "R19",
        "R20", "R21", "R22", "R23", "R24", "R25", "R26", "R27","R28", "R29", "R30",
        "R31"};
     
      char *chaine_recherchee = "R2";
      int indice_recherche = recherche_indice(Registre,32,chaine_recherchee);
     
     
      if(indice_recherche == -1){
        printf("La chaine n'a pas ete trouvee\n");
      }
      else{
        printf("La chaine est a l'indice : %i\n",indice_recherche);
      }
     
      return 0;
     
    }
     
     
    int recherche_indice(char **tab,int size, char *recherche){
     
      int i;
     
      for(i = 0; i < size; i++){
     
        if(strcmp(tab[i],recherche) == 0){
          return i;
        }
      }
      return -1;
    }
    La fonction renvoie l'indice ou -1 si la chaine n'est pas trouvée. Elle boucle sur ton tableau de taille size jusqu'à trouver la chaine recherchée.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 193
    Points : 53
    Points
    53
    Par défaut
    Merci ça marche: mais j'ai une question à vous poser
    pourquoi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     printf("%d\n",RechercheIndice(Registre,32 ,"R5"));
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     printf("%d\n",RechercheIndice(*Registre,32 ,"R5"));
    ?

  5. #5
    Membre confirmé Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Points : 515
    Points
    515
    Par défaut
    En suivant le prototype de la fonction que j'ai mise : on attend un tableau de chaines de caractères donc un char**. Si tu passes *Registre tu passes en fait ta première chaine R0 de ton tableau (fais un printf de *Registre et tu verras).

    Pour de plus amples informations : regardes les cours sur les pointeurs et les tableaux.

Discussions similaires

  1. Réponses: 20
    Dernier message: 22/02/2013, 20h42
  2. Réponses: 3
    Dernier message: 20/03/2012, 06h33
  3. Réponses: 6
    Dernier message: 09/06/2008, 16h35
  4. Réponses: 23
    Dernier message: 10/01/2006, 13h33
  5. Réponses: 6
    Dernier message: 05/01/2006, 14h23

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