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 :

Séparer une chaine en sous chaine


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Séparer une chaine en sous chaine
    Bonjour

    Je me posais une question , j'aimerais diviser une chaine en sous chaine pour pouvoir ensuite les trier par longueur de chaine de caractere

    Je m'explique : si je rentre "ceci est un essai" j'aimerais arriver a classer les mot par longueur mais je ne vois pas de solution a pars en separant la chaine en plusieurs chaine :s

    Voila ce que j'ai deja fait :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <malloc.h>
     
    void count();
    char txt[1000];
     
    int main()
    {
     printf("\n\nEntrer le texte de votre choix\n\n");
     fgets(txt,999,stdin);                 
     printf("\nVous avez rentre : %s\n\n",txt);
     count();
     
     return(0);
    }
     
    void count()
    {
     int taille=strlen(txt);
     int caract=strlen(txt);
     int nb=0,i=0;
     
     for(i;i<taille;++i)
         {
                 if((txt[i]== ' ') || (txt[i] == '\'') || (txt[i] == ',')){
                 nb++;
                 caract--;}
         }
     nb++; //car pas d'esapace en fin de ligne
     
     printf("Il y a : %d mot",nb);
     printf("\nIl y a %d caractere (sans espace)",caract-1);
    }
    Pleassee help


    PS:J'ai deja demander de l'aide sur un forum mais j'arrive toujours pas a comprendre

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [Debutant]Separer une chaine en sous chaine
    Citation Envoyé par firemax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     for(i;i<taille;++i)
    Et ça veut dire quoi ce i tout seul ?

    Ta méthode pour compter les mots est douteuse. On ne peut pas compter les séparateurs, car il peut y en avoir plusieurs à la suite, comme ' ' ou ', '

    L'idée est de parcourir la chaine, ok, mais en gérant un état séquenciel 'mot / non-mot' en fonction des évènements que sont les caractères composant les mots (alphanumérique, '-') et les autres caractères. Ca se traduit par une machine à état simpliste (2 états), mais dont les transitions servent à actionner les compteurs comme il faut.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Re: [Debutant]Separer une chaine en sous chaine
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par firemax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     for(i;i<taille;++i)
    Et ça veut dire quoi ce i tout seul ?

    Euh parceque j'ai declarer i avant et que je savais pas quoi mettre

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: [Debutant]Separer une chaine en sous chaine
    Citation Envoyé par firemax
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par firemax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     for(i;i<taille;++i)
    Et ça veut dire quoi ce i tout seul ?
    Euh parceque j'ai declarer i avant et que je savais pas quoi mettre
    Si il est déjà initialisé, tu mets rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     int i = 0;
     
     for (; i < taille; ++i)
    mais ça a un coté bancal qui ne me plait pas trop...

    Personellement, je fais ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     int i;
     
     for (i = 0; i < taille; ++i)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Ok je ferais plus attention sur mes for

    Mais est ce que quelqu'un pourait m'aider

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par firemax
    Ok je ferais plus attention sur mes for

    Mais est ce que quelqu'un pourait m'aider
    J'ai complété mon premier post ...

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    On t'a déjà indiqué le petit automate (ou machine à états) très simple, avec deux états je lis un mot où je ne lis pas de mot.
    Au début du prog tu n'as pas lu de mot, (etat = 0 par exemple)
    Tant que tu ne lis pas de caractère alphabétique tu reste dans le même etat.
    Tu lis un caractère alphabétique, tu mets le flag etat à 1 et tu augmente le nombre de mots lus de 1.
    Tant que tu lis un caractère alphabétique, tu restes dans le même état.
    Si tu lis un caractère qui n'est pas alphabétique ton etat revient à 0 et on recommence.
    Creuse ce système avec une boucle sur la lecture de caractères.
    J'espère avoir été clair

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    euhhhh

    J'avoue ne pas vous avoir comris tous les deux

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Points : 125
    Points
    125
    Par défaut
    C'est juste et simple,
    tu lis caractère par caractère ta string lorsque tu n'as pas de caractère d'espacement tu met une variable a true et tu incrémente ton nombre de mot... et des que tu arrive sur un caractere d'espacement tu met la meme variable a false...
    Tu comprends ???

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Allons-y pour un petit bout 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
    int inmot; // flag indiquant si on lit un mot ou pas
    int len; // longueur de la phrase à étudier
    int nbmot; // nombre de mots de la phrase
    int i; // compteur pour parcourir la phrase
    for(i = 0, len =  = strlen(phrase), inmot = 0, nbmot = 0; i < len; i++)
    {
       switch(inmot)
      {
         case 0: // on n'est pas dans un mot
           if (isaplha(phrase[i]))
           {
              // on vient de trouver un nouveau mot
               inmot = 1;
               nbmot++;
           }
           break;
        case 1 :
           if (!isaplha(phrase[i]))
           {
              // on etait dans un mot, mais on en sort
              inmot = 0;
           }
           break;
      }
    }
    printf("Dans la phrase %s il y a %d mot(s)\n", phrase, nbmot);

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

Discussions similaires

  1. extraire une sous-chaine d'un chaine
    Par mamax29 dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2011, 16h39
  2. Découper une chaine en sous chaine
    Par d.tellier dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2010, 18h19
  3. [RegEx] Savoir si une chaine contient sous-chaine
    Par astrolane dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2009, 16h53
  4. parse une chaine en sous chaine de longueur max X
    Par bruman dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2008, 17h12
  5. Rechercher une sous chaine dans un chaine
    Par franck06 dans le forum Access
    Réponses: 2
    Dernier message: 20/09/2006, 14h53

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