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 :

Compter les occurences dans une chaîne


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Compter les occurences dans une chaîne
    Bonjour ,

    En découverte sur le c , j'ai du mal à saisir les fonctions sur les chaines de caractères. J'essaie de faire des fonctions d'extractions dans des chaines .

    je ne saisi pas mon erreur voici le code utilisé avec ( lcc & dev-c++ ).

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char *LignesCar ;
    char StrLigne[] ;
    char *LigneTab ;
    int Total ;
     
    int Compte( char *Ligne)
    {
        int car ;
        int CountCar=0 ;
        char *Mot=Ligne ;
     
        while ( *Mot !='\0')
        {
            Mot++;
        }
     
        return Mot-Ligne ;
    }
     
    int CountCar( char StrLigne[])
    {
        int Index =0;
     
        while ( StrLigne[Index] !='\0')
        {
            Index ++;
        }
     
        return Index ;
    }
     
    int CountTab( char *LignesCar)
    {
        int Index =0;
        int Car ;
     
        while ( LignesCar[Index] !='\0')
        {
            Car=getchar();
     
            if (Car=='\t')
            {
                Index++ ;
            }
        }
     
        return Index ;
    }
     
    int main(int argc,char *argv[])
    {
        LigneTab="un    deux    trois    quatre    conq    six    sept    huit    neuf    dix    ";
     
        Total = 0 ;
        Total=Compte(LigneTab);
        printf("Compte nombre de caratere %d \n",Total); /* Ok */
     
        Total=CountCar(LigneTab);
        printf("CountCar nombre de carateres %d \n",Total); /* Ok */
     
        Total=CountTab(LigneTab);
        printf("CountTab nombre de carateres %d \n",Total); /*en attente pendant l'éxécution */
     
        return 0;
    }
    quelqu'un peut il me renseigner ?

    Cordialement .

  2. #2
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Salut,

    qu'est censé faire le code. les 2 premieres fonctions comptent le nombre de lettre de caractères dans une chaîne, mais la dernière, je ne vois pas ...

    Dans le cas où tu ne le savais pas, getchar() lit sur l'entrée standard et pas dans la chaîne que tu passes en paramètre à ta fonction.


    à+
    Wer nicht probiert, verliert !!

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    1 / ta chaine LigneTab de contient pas de tabulations mais seulement des espaces

    2/ ta fonction CountTab() est fouareuse :
    • pourquoi appeler getchar() ?
    • De plus, index n'est incrémenté qu'en cas de tabulation donc boucle infinie....
    Voici une version modifiée de ta fonction :

    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
    int CountTab( char *LignesCar)
    {
        int Index =0;
        int Car ;
     
        while ( *LignesCar !='\0')
        {
            if (*LignesCar =='\t')
                Index++ ;
     
            LignesCar++;
        }
     
        return Index ;
    }
    Voici une version revisitée de ton 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <stdio.h>
     
    int count_chars1(const char *str)
    {
        const char *p = str;
     
        while (*p !='\0')
            p++;
     
        return (p - str);
    }
     
    int count_chars2(const char str[])
    {
        int n = 0;
     
        while (str[n] !='\0')
            n++;
     
        return n;
    }
     
    int count_tabs(const char *str)
    {
        const char *p = str;
        int n = 0;
     
        while (*p !='\0')
        {
            if (*p =='\t')
                n++ ;
     
            p++;
        }
     
        return n;
    }
     
     
    int main(int argc,char *argv[])
    {
        char *str = "un    deux    trois    quatre    cinq    six    sept    huit    neuf    dix    ";
     
        printf("count_chars1() : nb char %d \n",  count_chars1(str));
        printf("count_chars2() : nb char %d \n", count_chars2(str));
        printf("count_tabs()   : nb char %d \n", count_tabs(str)); 
     
        return 0;
    }
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 18
    Points : 18
    Points
    18
    Par défaut [RESOLU] Compter les occurences dans une chaîne
    Merci vicenzo ,


    Je débute , je suis en découverte de C.
    Pourquoi j'utilise getchar(), c'est parce que les exemples que j'ai , utilise getchar() ;
    Mais aussi ensuite la compréhension que je en avais était bien erronée , au regard de ton code qui est bien réduit.


    Beau code concis .

    Je vais approfondir mes infos sur les pointeurs et chaines.

    Amicalement.

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

Discussions similaires

  1. Compter les occurences dans une chaîne de caractères
    Par Stephanie_21 dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 22/10/2012, 02h44
  2. Compter les occurrences d'une chaîne dans une feuille
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/11/2008, 08h59
  3. [RegEx] Regex : récupérer toutes les occurences dans une chaîne
    Par Poulpynette dans le forum Langage
    Réponses: 1
    Dernier message: 10/10/2006, 10h14
  4. [FAQ] compter les occurences d'une chaîne dans un fichier
    Par cafeine dans le forum Contribuez
    Réponses: 3
    Dernier message: 25/07/2006, 11h21
  5. [TestStand] Compter les éléments d'une chaîne de caractères
    Par capblans dans le forum Autres langages
    Réponses: 2
    Dernier message: 29/04/2005, 09h29

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