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 un mot de meme taille dans une chaine de caracte


Sujet :

C

  1. #1
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut rechercher un mot de meme taille dans une chaine de caracte
    ai lu de poste au sujet de la recherche de mot dans une chaine de caractere.

    j'ai testé le code donné et celui recherche juste une portion de code identique:
    c'est a dire qu'il va dire avoir trouve le mot "cou" dans le mot "coucou" d'une des lignes du fichier txt.

    je dois cree un historique de mes commandes utiliser sans les duplique

    Je voulais donc savoir si il etait possible de force la recherche sur les chaines de caracteres de meme longeur.

    j'ai essayer ca:
    je decoupe donc mon texte ligne par ligne
    puis mot par mot
    je compare la taille d'un de ces mot a la taille de ma commande saisie
    et contenue ds "entree"

    je voulais donc savoir si sa vous parait correct


    Si on a "cou" il va le comparer uniquement au mot de taille 3.
    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
     
     
    while(fgets(buffer,256,fd) != NULL)    // on passe ligne par ligne
         {
           temp = strtok(buffer, " ");
             if(strlen(temp)==strlen(entree))
                    if(strstr(temp,entree) != NULL)  // on compare ligne par ligne a notre entree
                     {
                      trouve = 1;                      // la chaine a été trouvée
                      }
     
             temp = strtok(NULL, " ");
             while (temp !=NULL)
             {
                if(strlen(temp)==strln(entree))
                   {
                     if(strstr(temp,entree) != NULL)  // on compare ligne par ligne a notre entree
                    {
                     trouve = 1;                      // la chaine a été trouvée
                    }
                  }
               temp = strtok(NULL, " ");
             }
          }
       if(trouve != 1 ) // on a pas trouvé cette commande
       {
         printf("La commande %s n'a pas ete trouve\n", entree); //on l'ajoute a history
         fseek(fd,0,SEEK_END);
         fwrite(entree,strlen(entree),1,fd);
         fwrite("\n",1,1,fd);
         fclose(fd);
       }
      else
      {
        printf("Chaine trouvee on ne l'ajoute pas a history\n");
      }
    lce code m'evide donc de dire que la saisie de "cou" a deja ete trouver ds "coucou"
    mais il me trouve la commande "ls" dans "ls -l" qui pour moi sont 2commandes diffrentes

  2. #2
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    je voulais savoir si j'utilise 2 strtok dans mon prog qui se chevauche et tavaiialnt sur 2 chaines de caractere differente pouvais renter en conflit
    vis a vis du reste de la chaine presente ds NULL .

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       temp = strtok(NULL, " ");
    je comprends pas bien ce que tu fais la : strtok coupe la premiere chaine de en blocs separes par des caracteres de la seconde. Or ici, tu cherches a couper NULL ?
    A part ca, ca vient peut etre du fait que ls -l contient un espace entre "ls" et "-l". Or vu que ton separateur est l'espace, tu obtiens deux chaines : ls et -l>
    Donc il est normal de trouver la chaine ls quand tu la cherches (suis pas sur d'etre tres clair, desole si c'est le cas)
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    en fait NULL contient le reste de la chaine
    c'est un bisard mais de ce que j'ai compris sa marcherait comme ca

  5. #5
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    strtok fonctionne bien ainsi
    il y a du linge sur la corde à linge

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Je vois toujours pas comment NULL peut contenir quelque chose...
    Voici le man que j'ai de strtok, ils parlent pas de NULL, d'ou mon post...
    char *strtok(char *s1, const char *s2);
    strtok()
    The strtok() function can be used to break the string
    pointed to by s1 into a sequence of tokens, each of which is
    delimited by one or more characters from the string pointed
    to by s2. The strtok() function considers the string s1 to
    consist of a sequence of zero or more text tokens separated
    by spans of one or more characters from the separator string
    s2. The first call (with pointer s1 specified) returns a
    pointer to the first character of the first token, and will
    have written a null character into s1 immediately following
    the returned token. The function keeps track of its position
    in the string between separate calls, so that subsequent
    calls (which must be made with the first argument being a
    null pointer) will work through the string s1 immediately
    following that token. In this way subsequent calls will work
    through the string s1 until no tokens remain. The separator
    string s2 may be different from call to call. When no token
    remains in s1, a null pointer is returned.
    Avec un pointeur auter que NULL, ca fonctionne ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    The function keeps track of its position
    in the string between separate calls, so that subsequent
    calls (which must be made with the first argument being a
    null pointer
    ) will work through the string s1 immediately
    following that token
    il y a du linge sur la corde à linge

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Ok, desole, au temps pour moi, ferai plus attention la prochaine fois
    Et du cote du "ls -l" separe en "ls" et "-l", il en est quoi ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    o prochaine appel de strtok
    temp= strtok(NULL," ");
    temp contiendra "-l"

  10. #10
    Membre régulier Avatar de kaisse
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Points : 117
    Points
    117
    Par défaut
    ai lu de poste au sujet de la recherche de mot dans une chaine de caractere.

    j'ai testé le code donné et celui recherche juste une portion de code identique:
    c'est a dire qu'il va dire avoir trouve le mot "cou" dans le mot "coucou" d'une des lignes du fichier txt.

    je dois cree un historique de mes commandes utiliser sans les duplique

    Je voulais donc savoir si il etait possible de force la recherche sur les chaines de caracteres de meme longeur.
    Ma remarque va peut être sembler débile, mais ce que je propose devrait correspondre à ce que tu cherches.
    Plutot que de chercher "cou" cherche " cou " avec un espace devant
    et un derrière. Bon, le problème c'est qu'il y a quelques cas ou ca ne passe pas:

    En début ou fin de ligne
    En début ou fin de fichier

    Donc en gros faudrait faire a

    1- Comparer le mot avec les premiers caractères du fichier ("cou" avec les 3 premiers caractères) si il y concordance, vérifier que le caractère suivant est un espace, passage à la ligne ou tabulation.

    2- rechercher "cou" dans le reste du fichier et voir à chaue fois si le caractères précédent et le caractère suivant sont des espaces, passages à la ligne, tabulations, ou fin de fichier (EOF)

  11. #11
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    je te remercie
    ton idée est loin d'etre betes meme astucieuse

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/06/2012, 20h15
  2. Réponses: 3
    Dernier message: 31/08/2011, 15h20
  3. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47
  4. Recherche un mot dans une chaine de caractere
    Par jean tof dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2006, 11h34
  5. [Regex]Recherche de mots dans une chaîne
    Par lionel69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/11/2005, 18h20

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