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 :

Recherche de prefixes et de motifs


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 69
    Par défaut Recherche de prefixes et de motifs
    Bonjour,

    Je dois écrire 1 fonction recherchant tout d'abord un motif dans une chaîne de caractères et renvoyant la position des occurences.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void recherche (char *texte, char *motif) {
      int i,j;
      for (i=0;i<strlen(texte);i++) {
        j=0;
        if (texte[i]==motif[j]) {
          printf("occurrence en position:%d\n",i);
          j=j+1;
        }
        else
          j=j+1;
      }
    }
    Ce code ne prends en compte que le premier caractère du motif pas les autres.
    Par exemple, pour :
    texte = bonjour
    motif = oj
    Il me renvoie seulement :
    occurence en position 1
    Alors que j'incrémente j donc je regarde les autres caractères du motif...
    Que dois-je modifier?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Normal, tu compares un caractere ( texte[i] ) et pas une chaine de caractere.

    Utilise la fonction strcmp

    Si tu veux le faire toi même, alors après avoir incrémenté j dans le cas ou les deux caractères sont égaux, il faut que tu regarde le caractère suivant. Tu devrais utiliser une boucle while, avec comme condition :
    tant que le caractere courant de ma chaine (i+j) est égal au caractere courant de mon motif (j), continuer.
    Quand tu arrive à la fin du motif, c'est gagné.
    Attention à ne pas dépasser la longueur du motif et de la chaine.

    C'est clair ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 69
    Par défaut
    Oui, ok je vais essayer avec tes indications.

    Merci


    EDIT :
    Je crois ne pas bien comprendre exactement ce qu'il faut faire..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void recherche (char *texte, char *motif) {
      int i,j;
      printf("\n++++ Compte rendu de la recherche d'occurrences dans le motif  ++++\n");
     
      for (i=0;i<strlen(texte);i++) {
        j=0;
        if (texte[i]==motif[j] && j<strlen(motif)) {
          printf("occurrence en position:%d\n",i);
          j=j+1;
        }
        while (texte[i+j]==motif[j] && j<strlen(motif))
          j=j+1;
      }
    }

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 104
    Par défaut
    Trace ton programme, il y a encore un soucis.

    Tu compares texte[i] et motif[j] dans un if et tu fais le printf("Occurence à l'indice ....").
    C'est à dire que des l'instant que deux lettres sont identiques, tu rentres dans ton if et tu affiches ton message.

    Il te manque au moins une boucle et tu dois déplacer ton printf().

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 613
    Par défaut
    Tu n'es pas très loin.
    Le principe est le suivant :
    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
     
    int trouve = 0;
    for (i=0;i<strlen(texte);i++) {
        j=0;
        while ( texte[i+j]==motif[j] )
        {
            j=j+1;
            if( j == strlen(motif) )
            {
                trouve = 1;
                break;
            }
        }
        if( trouve == 1)
           break;
    }
    if(trouve == 1)
        printf("TROUVE !\n");
    Attention je n'ai pas mis de controle de dépassement de longueur.
    Dans le while il faut faire attention a ne pas depasser la taille de motif ET la taille de texte

    Code non testé

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    pour rechercher une sous-chaîne (motif) dans une chaîne la fonction est strstr

Discussions similaires

  1. [WSS3] recherche: pluriels,prefixe,accent,pertinence
    Par sboober dans le forum SharePoint
    Réponses: 12
    Dernier message: 31/03/2009, 15h45
  2. Recherche d'un motif dans une image ?
    Par MonsieurAk dans le forum Windows
    Réponses: 1
    Dernier message: 17/06/2006, 11h39
  3. [RegEx] difficulté à créer un motif de recherche
    Par cyberzoide dans le forum Langage
    Réponses: 3
    Dernier message: 16/11/2005, 18h46
  4. Réponses: 5
    Dernier message: 23/08/2004, 21h12
  5. recherche d'un motif inconnu et de taille inconnu
    Par perlaud dans le forum Modules
    Réponses: 6
    Dernier message: 07/07/2004, 10h04

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