recherche d'un mot dans une chaine

recherche d'un mot dans une chaine - C++ - Programmation

Marsh Posté le 15-01-2007 à 22:37:13    

Bonsoir,
J'ai un petit programme à faire en C++ qui n'est pas très dur de prime abors. Le seul probleme est que je n'ai pas le droit d'utiliser de fonction de la classe string... Et la tout se complique  :sweat:  
Explication du programme :  
On lance le programme avec un parametre (un mot).
Le programme demande à l'utilisateur de saisir une phrase (sur plusieurs lignes).
On recupere chaque ligne une par une jusqu'a une ligne X qui contiendra le mot passé en parametre.
 
Bref, sommes toutes un exercice sans grande difficulté... Si on avait le droit aux string... Parce que la, je n'ai aucune idée de la facon de comparer mon mot avec ma ligne, puis d'arreter la saisie s'il est égal... Quelqu'un aurait-il une idée ???
Merci d'avance, et bonne soirée :hello:  
Meloo

Reply

Marsh Posté le 15-01-2007 à 22:37:13   

Reply

Marsh Posté le 16-01-2007 à 09:59:21    

Ton prof qui a décrété le pas le droit à la classe string est un sinistre idiot.

Reply

Marsh Posté le 16-01-2007 à 10:08:46    

...sauf si le but est justement de reprogrammer des fonctionnalités semblables à celles de std::string :spamafote:
 
Meloo: que devez-vous utiliser ? qu'avez-vous vu en cours ?


---------------
TriScale innov
Reply

Marsh Posté le 16-01-2007 à 10:57:37    

franceso a écrit :

sauf si le but est justement de reprogrammer des fonctionnalités semblables à celles de std::string


 
Ce qui n'a un iteret pédagogique que au sein d'un cours d'ALGORITHMIE et non de C++ ...
string, comme vector, devraient etre enseignés comme faisant partis des types atomiques du  
langage afin d'eviter ces kilometres d'horreur que sont l'utilsiation des pointeurs pour gérer tableaux  
et chaine de caracteres en C++.

Reply

Marsh Posté le 16-01-2007 à 11:18:11    

Joel F a écrit :

Ce qui n'a un iteret pédagogique que au sein d'un cours d'ALGORITHMIE et non de C++ ...

J'ai maheureusement l'impression que de plus en plus de gens apprennent l'algorithmie en faisant du C++ (ou plutôt un truc qu'on pourrait appeler C+, qui ressemble à du C dans lequel on remplace printf par cout)


---------------
TriScale innov
Reply

Marsh Posté le 16-01-2007 à 12:09:57    

franceso a écrit :

J'ai maheureusement l'impression que de plus en plus de gens apprennent l'algorithmie en faisant du C++ (ou plutôt un truc qu'on pourrait appeler C+, qui ressemble à du C dans lequel on remplace printf par cout)


 
Je préconise le retour au supllice du pal pour ces gens là :o

Reply

Marsh Posté le 16-01-2007 à 13:28:03    

Joel F a écrit :

Je préconise le retour au supllice du pal pour ces gens là :o


 
On le plante dans leur Cin ?


Message édité par straffo le 16-01-2007 à 13:28:27
Reply

Marsh Posté le 16-01-2007 à 13:33:02    

Un cours d'algorithmie en plus d'un cours de C++, ça a un std::cout.
 
Sinon, pour répondre à la question, il y a la fonction standard strstr() qui peut t'aider. Mais je plussoie, c'est une stupidité que de devoir utiliser des fonctions C pour remplacer des trucs courants en C++.

Reply

Marsh Posté le 16-01-2007 à 13:53:15    

bah c'est des cours donnés par d'anciens profs de C qui n'ont jamais mis les pieds dans une entreprise. On leur a appris comme ca donc c'est comme ca qu'il l'enseigne

Reply

Marsh Posté le 16-01-2007 à 15:17:28    

capitaineigloo a écrit :

bah c'est des cours donnés par d'anciens profs de C qui n'ont jamais mis les pieds dans une entreprise. On leur a appris comme ca donc c'est comme ca qu'il l'enseigne

 :non: Dans mon école, il s'agit d'un choix raisonné, l'objectif étant de permettre aux élèves de « s'affranchir de la syntaxe contraignante du C pour pouvoir se concentrer sur les problèmes d'algorythmie ». Finalement, les élèves utilisent new / delete au lieu de malloc / free, mais ne connaissent pas la STL :/
 
Quand je repasse derrière pour leur expliquer que non, ils ne connaissent pas vraiment le C++ et que oui, std::vector<int> est plus sûr que int*, c'est un peu galère...


---------------
TriScale innov
Reply

Marsh Posté le 16-01-2007 à 15:17:28   

Reply

Marsh Posté le 16-01-2007 à 17:44:04    

Bonjour ^^
En fait, j'ai fait du C++ et de l'algo pendant un an l'an dernier (donc on a appris les bases quoi...).
La on refais du systeme, et ils nous ont donné des exercices de revisions... Donc on est sencé savoir le faire :S.
 

Citation :

Meloo: que devez-vous utiliser ? qu'avez-vous vu en cours ?


On a vu les tableaux, les pointeurs, allocation dynamique, les strings^^, les arbres, les listes chainées, les classes etc etc...
 
 
Pour strstr() ou même pour la fonction strlen() dans le man http://man.developpez.com/man3/strstr.3.php, elles sont écrit appartenant à la classe string  

Code :
  1. SYNOPSIS
  2. #include <string.h>
  3. char *strstr (const char *meule_de_foin, const char *aiguille);


Donc ca veut dire que je ne peux pas les utiliser ? :S Ou bien ca veut dire que ce sont des fonctions qui sont reprises dans la classe string ??? (parce que bon, si strlen ne fonctionne pas, il faut encore faire une boucle pour connaitre la taille du mot recherché etc etc :S)
 
En tout cas, merci de vos réponses  :pt1cable:  
bonne soirée
meloo

Reply

Marsh Posté le 16-01-2007 à 17:49:04    

Non, pas la "classe" string, ces fonctions sont définies dans l'en-tête string.h (qui définit une partie de la libc).

 

Tu peux les utiliser, c'est standard (ed : mais ça reste très laid [:manust])


Message édité par Elmoricq le 16-01-2007 à 17:52:55
Reply

Marsh Posté le 16-01-2007 à 18:17:25    

Héhé, bon ok c'est laid... Donc si j'ai le droit à strstr(), strlen(), strcpy()..ca me donne le petit programme :

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. using namespace std;
  5. int main(int argc, char **argv){
  6. int i, nbCarSais, nbCarTotal;
  7. char motDeFin[80];
  8. char bufferLigne[80]; // Une ligne ne peut etre de taille superieure a 80 caracteres  
  9. char buffer[1000];
  10. bool motTrouve = false;
  11. bool carTrouve = false;
  12. if (argc !=2) {
  13.  cerr << "Veillez écrire un argument." << endl;
  14.  exit (1);
  15. }
  16. i=0;
  17. // Si strcat interdit
  18. // while (argv[1][i] != NULL){
  19. //  motDeFin[i] = argv[1][i++];
  20. // }
  21. strcpy(motDeFin, argv[1]);
  22. // motDeFin[i]='\0';
  23. cout << "Le mot de fin est : " << motDeFin << endl;
  24. cout << endl << endl << "Veuillez saisir une phrase." << endl;
  25. nbCarTotal=nbCarSais=0;
  26. while (!motTrouve){
  27.  cin.getline(bufferLigne,80);
  28.  if (strstr(bufferLigne, motDeFin)!=NULL)
  29.   motTrouve=true;
  30.  nbCarSais = strlen(bufferLigne);
  31.  for (i=0; i<nbCarSais; i++) {
  32.   buffer[nbCarTotal]=bufferLigne[i];
  33.   bufferLigne[i]='.';
  34.   nbCarTotal++;
  35.  }
  36. // strcat(buffer,bufferLigne);
  37.  buffer[nbCarTotal]='\n';
  38.  nbCarTotal++;
  39. }
  40. buffer[nbCarTotal]=NULL;
  41. cout << "La phrase copiée est : " << endl << buffer ;
  42. return 0;
  43. }

Reply

Sujets relatifs:

Leave a Replay

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