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.
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.Envoyé par skulled
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
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'.Envoyé par Emmanuel Delahaye
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
Salut,
Après la théorie la pratique! Rien de tel que d' apprendre par l' exemple.
Le pointeur constitue la quatrième révélation mystique.
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; }
Rien de tel qu'apprendre par soi-même, c'est mieux je penseEnvoyé par Lunixinclar
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'
Comment ça il aurait pu? L'implémentation avec l' instruction for reste à faire.
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
La chaine de départ est inchangée. C'est le pointeur local qui a bougé...Envoyé par minirop
Par contre j'aurais mis :
car il n'y a aucune raison de refuser les chaines constantes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part int nombre_de_e (char const* a)
Pas de Wi-Fi à la maison : CPL
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 :Envoyé par skulled
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
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').Envoyé par skulled
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
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.....
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]); } }
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!!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part void main(void)
- Microsoft Dynamics AX Technical Expert
- OpenERP Module Developper
- Mécanicien informaticien passioné
- CV : http://www.viadeo.com/fr/profile/mohamed-amine.
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...
Non : Le type retourné par main()Envoyé par orj30754
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; }
AchtungEnvoyé par gege2061
Ce n'est pas du tout ce que j'ai conseillé maintes fois et qui est :
Qui fonctionne avec tous les tableaux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#define NB_ITEM(tab) (sizeof (tab) / sizeof *(tab)) /* EDIT */
(attention à la place des parenthèses...)
Pas de Wi-Fi à la maison : CPL
Effectivement, c'est une erreur c'est corrigéEnvoyé par Emmanuel Delahaye
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager