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 :

Nombre de 'e' dans un phrase


Sujet :

C

  1. #1
    Membre régulier Avatar de skulled
    Inscrit en
    Décembre 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 120
    Points : 120
    Points
    120
    Par défaut Nombre de 'e' dans un phrase
    Bonjour, j'aimerai savoir comment faire pour trouver les nombre de 'e' par exemple dans une phrase que l'utilisateur saisis.
    Sachant que je ne connais pas les chaines de caracteres. Donc en utilisant le type char.
    Merci de me mettre sur la voie.

  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
    Citation Envoyé par skulled
    Bonjour, j'aimerai savoir comment faire pour trouver les nombre de 'e' par exemple dans une phrase que l'utilisateur saisis.
    Sachant que je ne connais pas les chaines de caracteres. Donc en utilisant le type char.
    Merci de me mettre sur la voie.
    Si tu ne sais pas ce qu'est une chaine de caractère, tu ne peux pas faire cet exercice.

    Il y a un bug quelque part.

    Ceci dit je peux te faire une Grande Révélation, si tu t'y sens prêt...

    Une chaine de caractère est une séquence de caractères terminée par un 0. Elle est implémentée, par exemple, par un tableau de char donc chaque élément consécutif contient une valeur représentant un caractère. La chaine s'arrête au premier 0 rencontré. Les valeurs suivantes sont ignorées par les fonctions dites 'de chaines de caractères', c'est à dire dont le comportement est basé sur ce principe.

    printf(), les fonctions str*() etc.

    S'agissant d'un tableau de char, c'est l'adresse du premier élément du tableau qui est passé aux fonctions. Le paramètre est donc de type char *.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ceci dit je peux te faire une Grande Révélation, si tu t'y sens prêt...
    Suite à cette Révélation, ton exercice devient plutôt simple : pour chaque élément du tableau de char (élément situé avant le premier '\0' rencontré), regarder si c'est un 'e'.

    J'en profite pour te donner une Petite Révélation (deux grandes d'un coup, ça serait un peu dur ) : le premier élément d'un tableau se trouve à l'indice 0, et non à l'indice 1...
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  4. #4
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Salut,
    Après la théorie la pratique! Rien de tel que d' apprendre par l' exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int nombre_de_e (char* a)
    {
      int nb=0;
      while (*a != '\0')
      {
        if (a[0]=='e') nb++;
        a++;
      }
      return nb;
    }
    Le pointeur constitue la quatrième révélation mystique.

  5. #5
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Citation Envoyé par Lunixinclar
    Rien de tel que d' apprendre par l' exemple.
    Rien de tel qu'apprendre par soi-même, c'est mieux je pense
    Vue la difficulté du truc, il aurait pu essayer de le faire lui-même. Enfin bon... ce n'est pas grave, on va dire que c'est ton cadeau de Noël

    Nas'

  6. #6
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Comment ça il aurait pu? L'implémentation avec l' instruction for reste à faire.

  7. #7
    Nouveau membre du Club Avatar de minirop
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 58
    Points : 36
    Points
    36
    Par défaut
    Lunixinclar > tu aurais du modifier un pointeur local à la fonction sinon la chaine de départ est foutue.
    Envoyez des données et des fichiers en POST avec Qt : SendForm

  8. #8
    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 minirop
    Lunixinclar > tu aurais du modifier un pointeur local à la fonction sinon la chaine de départ est foutue.
    La chaine de départ est inchangée. C'est le pointeur local qui a bougé...

    Par contre j'aurais mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int nombre_de_e (char const* a)
    car il n'y a aucune raison de refuser les chaines constantes.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre régulier Avatar de skulled
    Inscrit en
    Décembre 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 120
    Points : 120
    Points
    120
    Par défaut
    Merci c'est gentil, mais il doit y avoir un possibilitée sans les pointeurs et les chaines de caractere puisque je ne les ai pas appris encore.
    But de l'exo:
    -faire saisir à l'utilisateur au plus 127 char, on prevoira un caractere de fin 'F' pour materialiser la fin souhaité de la saisie.
    -Afficher à l'écran le nbre total de char saisie ainsi que:
    Vous avez saisis "*" fois la lettre "a"
    Vous avez saisis "*" fois la lettre "b"
    Vous avez saisis "*" fois la lettre "c"
    ................................................
    Vous avez saisis "*" fois la lettre "z"

    Merci de m'aider ou même de me donner quelques indices.

  10. #10
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par skulled
    Merci c'est gentil, mais il doit y avoir un possibilitée sans les pointeurs et les chaines de caractere puisque je ne les ai pas appris encore.
    But de l'exo:
    -faire saisir à l'utilisateur au plus 127 char, on prevoira un caractere de fin 'F' pour materialiser la fin souhaité de la saisie.
    -Afficher à l'écran le nbre total de char saisie ainsi que:
    Vous avez saisis "*" fois la lettre "a"
    Vous avez saisis "*" fois la lettre "b"
    Vous avez saisis "*" fois la lettre "c"
    ................................................
    Vous avez saisis "*" fois la lettre "z"

    Merci de m'aider ou même de me donner quelques indices.
    Simple :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    - Définition d'un tableau t de 26 cases (1 par lettre), pour les compteurs;
    - Faire
       - Saisie d'une lettre s;
       - Si s != 'F', t[la_bonne_case]++;
      Tant que s != 'F';
    - Afficher le tableau.
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  11. #11
    Membre régulier Avatar de skulled
    Inscrit en
    Décembre 2006
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 120
    Points : 120
    Points
    120
    Par défaut
    pourrai tu m'eclaircir un plus stp au niveau des tableaux je n'ai pas bien compris.
    Il faut 2 tableaux?
    Qu'est ce que "s"? un tableau??...
    Merci

  12. #12
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par skulled
    pourrai tu m'eclaircir un plus stp au niveau des tableaux je n'ai pas bien compris.
    Il faut 2 tableaux?
    Qu'est ce que "s"? un tableau??...
    Merci
    Pour ma solution, il faut un seul tableau d'entiers, de 26 cases correspondant chacune à une lettre de l'alphabet (de 'a' à 'z').
    Il faut aussi un caractère (type char en C). s est le caractère saisi par l'utilisateur.

    L'algo consiste à lire la lettre saisie par l'utilisateur, et à incrémenter (i.e. ajouter 1) à la case du tableau qui correspond à cette lettre (la case 0 si la lettre est 'a', la case 1 pour la lettre 'b', etc.).

    Voilà, tu devrais pouvoir écrire le code C correspondant assez facilement.
    [alkama] quelqu'un est allé voir la guerre des mondes?
    [@Chrisman] j'espère pour spielberg
    --- bashfr.org

  13. #13
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Et si tu crée deux tableaux:
    Un contenant toutes les lettres de l'alphabet(TAB1) dans l'ordre et l'autre sera fait comme un histogramme(HISTO) de 26 cases logique vu qu'il y a 26 lettres......

    Principe:

    tu recuperes ta phrase saisit par l'utilisateur, tu compares les lettres une a une avec ton tableau TAB1. Quand tu trouves la lettre cherchée tu recuperes la position de celle ci et tu increment la case de HISTO[position] de 1.
    A la fin tu fai afficher tes deux tableaux les un en dessous des autres et voila.....

  14. #14
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Et voila fai en peu de temps donc a ameliorer mais dans le fond c est ca et y marche

    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
    #include <stdlib.h>
    #include <conio.h>
    #include <math.h>
    #include <string.h>
     
     
    void main(void){
     
    	int histo[25];
    	char tab[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', '\0'};
    	int i, j=0, taille;
    	char ligne[2000];
    	char *c;
     
    	for(i=0; i<25; i++)  /* On initialise le tableau */
    		histo[i]=0;
     
     
    	printf(" Rentrez la phrase a traiter \n");
    	scanf("%s", ligne);			/* On recupere la ligne saisit */
    	taille=strlen(ligne);		/* Calcule de la longueur */
    	c=ligne;					/* On place le pointeur */
     
    	while(j<taille){			/* Boucle pour analyser chaque caractere */
    		for(i=0; i<25; i++){
    			if((c[j]==tab[i])){
    				histo[i]=histo[i]+1;  /* Si on trouve le caractere on incremente HISTO */
    				break;
    			}
    		}
    		j++;
    	}
    	for(i=0; i<25; i++){		/* Affichage */
    		printf("%d *", histo[i]);	
    		printf(" %c\n", tab[i]);
    	}
    }

  15. #15
    Membre habitué Avatar de ccensam
    Inscrit en
    Juillet 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2005
    Messages : 128
    Points : 162
    Points
    162
    Par défaut
    Est ce vous avez testez votre code?
    Tapez une phrase où il y a des espace? ca ne marchera pas!!!
    en plus, pourquoi inclure <math.h>!! et pourqoui
    la fonction main doit en principe retourner int!!!!
    - Microsoft Dynamics AX Technical Expert
    - OpenERP Module Developper
    - Mécanicien informaticien passioné
    - CV : http://www.viadeo.com/fr/profile/mohamed-amine.

  16. #16
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Comme j'ai marqué j'ai fait ca vite fait en faisant des copier coller....
    Et pour le void main(void) ya pas de soucis on peut le declarer comme ca, ca ne pose pas de probleme.

    SI il ya des espaces je pense que la boucle se fera jusqu'a ce que le compteur arrive a terme et puis c'est tout...

  17. #17
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par orj30754
    Et pour le void main(void) ya pas de soucis on peut le declarer comme ca, ca ne pose pas de probleme.
    Non : Le type retourné par main()

    Bon ton algo était correcte mais l'implémentation est à revoir :
    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>
    #include <string.h>
     
    #define MAX_SIZE 128
    #define NB_ITEM(t) (sizeof (t) / sizeof *(t))
     
    int main(void)
    {
      char tab[]={'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
     
      int histo[NB_ITEM (tab)] = {0};
      char ligne[MAX_SIZE];
      int i;
      int j;
     
      (void)printf ("Rentrez la phrase a traiter :\n");
      if (fgets (ligne, sizeof (ligne), stdin))
      {
        for (i = 0; ligne[i]; i++)
        {
          for (j = 0; j < NB_ITEM (tab); j++)
          {
            if (ligne[i] == tab[j])
            {
              histo[j]++;
              break;
            }
          }
        }
        for(i = 0; i < NB_ITEM (tab); i++)
        {
          (void)printf ("%d *", histo[i]);
          (void)printf (" %c\n", tab[i]);
        }
      }
      return 0;
    }

  18. #18
    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 gege2061
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define NB_ITEM ((sizeof (tab) / sizeof (*tab)) - 1)
    Achtung

    Ce n'est pas du tout ce que j'ai conseillé maintes fois et qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define NB_ITEM(tab) (sizeof (tab) / sizeof *(tab)) /* EDIT */
    Qui fonctionne avec tous les tableaux.

    (attention à la place des parenthèses...)
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    (attention à la place des parenthèses...)
    Effectivement, c'est une erreur c'est corrigé

  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ce ne serait pas plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define NB_ITEM(tab) (sizeof (tab) / sizeof *(tab))
    ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] compter le nombre de caractères dans une phrase saisie
    Par gnamienbenedicte dans le forum C#
    Réponses: 3
    Dernier message: 25/04/2014, 13h53
  2. [PPT-2010] mettre à jour les nombres dans une phrase
    Par pepsister dans le forum Powerpoint
    Réponses: 1
    Dernier message: 14/06/2010, 10h32
  3. [WD14] Nombre de mot dans une phrase
    Par ecoinfo dans le forum WinDev
    Réponses: 6
    Dernier message: 27/01/2010, 00h19
  4. Nombre d'occurences d'un mot dans une phrase
    Par cirtey dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/05/2007, 21h01
  5. Determiner le nombre de majuscules dans une phrase
    Par cirtey dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 02/03/2007, 09h36

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