Vérifier présence d'un mot dans une phrase

Vérifier présence d'un mot dans une phrase - C - Programmation

Marsh Posté le 20-05-2011 à 15:03:22    

Hello tout le monde, je suis nouveau sur le forum et je viens vous demander un peu d'aide.
Voilà je sors d'examen d'informatique et un exercice reste sans solution malgré des essais ultérieurs.
Je dois faire une programmation en C.
Faire saisir une phrase et un mot à l'utilisateur puis déterminer si le mot apparait dans la phrase.
 
Je bloque complètement la dessus.
 
Quelqu'un peut il m'aider parce que j'ai pas envie d'arriver en septembre en ayant pas pu résoudre ce problème?
 
Pour info, je peux utiliser toutes les fonctions des librairies des chaines de caractères. Je pensais utiliser des pointeurs...
 
Merci pour votre aide.

Reply

Marsh Posté le 20-05-2011 à 15:03:22   

Reply

Marsh Posté le 20-05-2011 à 15:18:41    

Ben... Je vois pas où est la difficulté...
La fonction "strstr" te fait pratiquement tout le boulot.

Reply

Marsh Posté le 20-05-2011 à 18:40:29    

Ben le souci c'est que l'on a pas vu cette fonction donc je me verrai mal l'utiliser... Finalement il y a peut être que les pointeurs mais là je galère... Quelqu'un peut m'aider sur ce point?

Reply

Marsh Posté le 21-05-2011 à 00:47:21    

Cette fonction strstr, elle s'utilise en sous programme? Et si je désire compter le nombre d’occurrences du mot, je peux ajouter un compteur ou non?

Reply

Marsh Posté le 21-05-2011 à 14:04:57    

Fais un coup de Google et lis le manuel de la fonction strstr ...
 
Il ne faut pas attendre les explications d'une personne dès que tu utilises une fonction que tu ne connais pas, sinon t'es bien mal barré :/


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 21-05-2011 à 14:22:07    

Voilà ce que j'ai fait mais sans cette fonction...
J'ai une syntaxe error before else... Je ne vois pas....
 
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(int argc, char *argv[])
  5. {
  6. char Phrase[500],Mot[20];
  7. int P,M,Cpt;
  8. Cpt=P=M=0;
  9. puts("Entrez une phrase" );
  10. gets(Phrase);
  11. puts("Entrez le mot a rechercher" );
  12. gets(Mot);
  13. while(Phrase[P]!='\0'){
  14.       while(Phrase[P]!=Mot[M]){
  15.                           P++;}
  16.             else{
  17.           for(M=0;M=='\0';M++){
  18.                    if(Phrase[P]=Mot[M]){
  19.                      (P++);}
  20.                                                              if(M=='\0'){
  21.                                                               Cpt=Cpt+1;}
  22.                                 }
  23.                                      }
  24.                              }
  25.            }
  26.            }
  27. printf("/nIl y a %d fois le mot %s dans la phrase.\n",Cpt,Mot);
  28. system("PAUSE" );
  29. return 0;
  30. }


Message édité par gilou le 21-05-2011 à 15:14:55
Reply

Marsh Posté le 21-05-2011 à 14:24:12    

J'ai des accolades fermantes en trop lol désolé

Reply

Marsh Posté le 21-05-2011 à 15:31:58    

Déja, il faut remplacer les appels a gets (utilisation interdite à tout jamais) par des appels à fgets

Code :
  1. #include <stdlib.h>
  2. #include <string.h>
  3. int main(int argc, char *argv[])
  4. {
  5.     char Phrase[500],Mot[20];
  6.     int P,M,Cpt;
  7.     Cpt=P=M=0;
  8.     puts("Entrez une phrase" );
  9.     // gets(Phrase);
  10.     fgets(Phrase, 500, stdin);
  11.     puts("Entrez le mot a rechercher" );
  12.     //gets(Mot);
  13.     fgets(Mot, 20, stdin);
  14.     while(Phrase[P]){
  15. while(Phrase[P] != Mot[M]){
  16.     P++;
  17. }
  18. else {
  19.     for(M=0;M=='\0';M++){
  20.  if(Phrase[P]=Mot[M]){
  21.      P++;
  22.  }
  23.  if(M=='\0'){
  24.      Cpt=Cpt+1;
  25.  }
  26.     }
  27. }
  28.     }
  29.     printf("\nIl y a %d fois le mot %s dans la phrase.\n", Cpt, Mot);
  30.     system("PAUSE" );
  31.     return 0;
  32. }


d'autre part, ton code contient un while..else, truc inconnu en C

Citation :

while(Phrase[P]!=Mot[M]){
                          P++;}
            else{


Enfin, l'utilisation de strncmp pourrait être un plus... (il serait étonnant que tu n'aies pas vu cette fonction et sa soeur strcmp)
Dernière remarque, c'est toujours mieux de faire ++P; que P++; quand on fait une simple incrémentation.
A+,


Message édité par gilou le 21-05-2011 à 15:35:55

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-05-2011 à 18:36:50    

Ok merci pour tout. Oui j'ai vu ces fonctions pas de souci. Par contre je connaissais pas ++P... Ca change quoi par rapport à P++
Merci pour tout ca marche enfin en tout cas.

Reply

Marsh Posté le 21-05-2011 à 21:07:52    

++P;
1) On incrémente P
2) On évalue l'assertion avec la valeur de P
 
P++;
1) On créé une variable temporaire avec pour valeur celle de P
2) On incrémente P
3) On évalue l'assertion avec la valeur de la variable temporaire
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-05-2011 à 21:07:52   

Reply

Marsh Posté le 22-05-2011 à 23:44:15    

Ok merci pour tout sympa d'avoir pris du temps pour les réponses!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed