Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
613 connectés 

  FORUM HardWare.fr
  Programmation
  C

  programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

programme

n°1422838
kiooik
Posté le 09-08-2006 à 13:46:27  profilanswer
 

Bonjour,
 
j'aimerais savoir comment inverser les mots d'une phrase dans un programme
 
si la phrase est " aujourd'hui le soleil brille" on doit obtenir "brille soleil le aujourd'hui "
 
merci

mood
Publicité
Posté le 09-08-2006 à 13:46:27  profilanswer
 

n°1422843
Elmoricq
Modérateur
Posté le 09-08-2006 à 13:49:50  profilanswer
 

Ben tu lis ta chaîne, tu la découpes suivant un séparateur (ici, l'espace), et tu parcours ensuite ton découpage de la fin jusqu'au début pour reconstruire une nouvelle chaîne, mais à l'envers.
 
De rien. [:el g]

n°1422867
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 14:17:52  profilanswer
 

Voir strtok


---------------
Töp of the plöp
n°1422868
Elmoricq
Modérateur
Posté le 09-08-2006 à 14:20:58  profilanswer
 

Pas l'idéal pour lire ensuite une chaîne à l'envers, vu que ça y colle des '\0' au fur et à mesure. :/
 
J'pensais plutôt à strrchr(), c'est pas plus compliqué à utiliser dans ce cas précis.

n°1422873
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 14:28:04  profilanswer
 

Ouais moi je pensais à mettre les mots dans un tableau et reparcourir le tableau ...
 
Enfin bref.


---------------
Töp of the plöp
n°1422917
Elmoricq
Modérateur
Posté le 09-08-2006 à 15:06:17  profilanswer
 

Ben ouais mais ça oblige à utiliser les listes chaînées (parce qu'un tableau faut le gérer vu qu'on n'en connait pas la taille avant d'interpréter la ligne de données), c'est assez lourd même si c'est facile à mettre en place.
 
Avec ma méthode, on reconstruit la chaîne finale tout en lisant la chaîne initiale, en une seule passe. Ca se fait en trois-quatre ligne dans une boucle while(). [:spamafote]


Message édité par Elmoricq le 09-08-2006 à 15:07:39
n°1422923
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 15:14:42  profilanswer
 

ah oui c'est vrai qu'en C on a pas les vector :D


---------------
Töp of the plöp
n°1422935
kiooik
Posté le 09-08-2006 à 15:23:03  profilanswer
 

Je suis débutant en c...alors si vs pouviez faire un petit exemple...c'est tjs plus parlant :)

n°1422953
_darkalt3_
Proctopathe
Posté le 09-08-2006 à 15:39:19  profilanswer
 

Comme le suggère Elmoricq, puisque sa solution est effectivement la plus simple à mettre en oeuvre:
 
- Tu utilises strrchr (voir doc) pour trouver les emplacement des " ".
- A partir de ces emplacements, tu peux parcour ta chaine initiale en regressant : tu pars du premier espace jusqu'à 0, tu sauvegardes ton index, tu cherches le second espace, tu reparcours ta chaine initiale du second espace jusqu'à l'index et ainsi de suite. Parallèlement au parcours, tu copie les caractères lu dans une chaine cible
- et c'est fini


---------------
Töp of the plöp
n°1427300
doton
Malloc could not alloc memory.
Posté le 18-08-2006 à 15:37:24  profilanswer
 

voici une petite fonction qui pourra t aider ... je m en sers plus depuis longtemps. Cette fonction stocke une chaine de caracteres dans un tableau de chaines de caracteres en fonction d un char delimiteur (char div --> ' ' dans ton cas) et te renvoie le tableau.
 

Code :
  1. char    *get_begin(char *s, char div)
  2. {
  3.   while (*s && (*s == div || *s == ' '))
  4.     s++;
  5.   return (s);
  6. }
  7. char    *get_end(char *s, char div)
  8. {
  9.   while (*s && *s != div)
  10.     s++;
  11.   return (s);
  12. }
  13. char    **my_str_to_wordtab(char *str, char div)
  14. {
  15.   char  *s;
  16.   char  *fin;
  17.   int   count;
  18.   char  **tab;
  19.   if (!str)
  20.     return (0);
  21.   for (s = get_begin(str, div), count = 0; *s; count++)
  22.     {
  23.       s = get_end(s, div);
  24.       s = get_begin(s, div);
  25.     }
  26.   tab = malloc((count + 1) * sizeof(fin));
  27.   for (s = get_begin(str, div), count = 0; *s; count++)
  28.     {
  29.       fin = get_end(s, div);
  30.       tab[count] = my_strndup(s, fin - s);
  31.       s = fin;
  32.       s = get_begin(s, div);
  33.     }
  34.   tab[count] = 0;
  35.   return (tab);
  36. }

mood
Publicité
Posté le 18-08-2006 à 15:37:24  profilanswer
 

n°1427853
Trap D
Posté le 20-08-2006 à 01:01:43  profilanswer
 

Ç'aurait été bien que tu testes le retour de malloc.

n°1427855
Taz
bisounours-codeur
Posté le 20-08-2006 à 01:08:43  profilanswer
 

on donne pas de solutions toutes cuites svp. surtout bugguées et incomplètes.

n°1427870
Giz
Posté le 20-08-2006 à 09:26:34  profilanswer
 

Taz a écrit :

on donne pas de solutions toutes cuites svp. surtout bugguées et incomplètes.


 [:figti]  
Bon ca fait 4 ans que je n'ai pas fait de C. Ceci dit j'ai du mal à comprendre tes propos, à priori ça à l'air de marcher. Où est l'erreur et qu'est-ce qui manque ?  :heink:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1428080
_darkalt3_
Proctopathe
Posté le 20-08-2006 à 17:01:40  profilanswer
 

Bah rien que  my_strndup et le fait que tu ne testes pas le retour de malloc donc.


---------------
Töp of the plöp
n°1428092
Giz
Posté le 20-08-2006 à 17:23:57  profilanswer
 

_darkalt3_ a écrit :

Bah rien que  my_strndup et le fait que tu ne testes pas le retour de malloc donc.


ben je suppose que "my_strndup" ajoute un caractère de fin, quand au retour du malloc, entre un message d'erreur ou un crash brutal, ca change quoi ?


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1428116
_darkalt3_
Proctopathe
Posté le 20-08-2006 à 18:12:07  profilanswer
 

Giz a écrit :

ben je suppose que "my_strndup" ajoute un caractère de fin, quand au retour du malloc, entre un message d'erreur ou un crash brutal, ca change quoi ?


Le gens qui aiment les choses bien faites préfèrent le message d'erreur et la sortie propre, les autres feront une daube inutilisable.
 
Enfin, ne poster qu'une partie de la solution ne doit pas vraiment aider.


---------------
Töp of the plöp
n°1428155
Trap D
Posté le 20-08-2006 à 18:54:56  profilanswer
 

Giz a écrit :

ben je suppose que "my_strndup" ajoute un caractère de fin, quand au retour du malloc, entre un message d'erreur ou un crash brutal, ca change quoi ?

A mon avis, my_strndup effectue une sauvegarde de la chaîne passée en argument, et ceci entre les adresse s et fin-s, comme quoi...
Maintenant entre un programme critique qui fera un log signalant un problème mémoire et continuera à fonctionner tout de même de manière un peu dégradée et un programme qui crashera bloquant tout un process qu'est-ce qu'il y a de mieux ?
J'exagère à peine.

n°1428196
Elmoricq
Modérateur
Posté le 20-08-2006 à 20:15:23  profilanswer
 

Sans compter que c'est un brin inutilement compliqué comme programme, pour la tache à effectuer. [:mlc]

n°1428200
Heurft
OUatE ?
Posté le 20-08-2006 à 20:28:31  profilanswer
 

Elmoricq a écrit :

Sans compter que c'est un brin inutilement compliqué comme programme, pour la tache à effectuer. [:mlc]


 
c'est clair :o

n°1428204
Giz
Posté le 20-08-2006 à 20:50:38  profilanswer
 

Elmoricq a écrit :

Sans compter que c'est un brin inutilement compliqué comme programme, pour la tache à effectuer. [:mlc]


 
c'est pas faux, mais c'est du C aussi : en dessous de 30 lignes de code, tu codes aucun algo :/.
Sinon comparer avec la valeur 0 pour un pointeur c'est cracra :o
 

Citation :

Note that using the integer 0 as the terminator would not have been portable: on some imple-
mentations, the integer zero and the null pointer do not have the same representation.
 
Bjarne Stoustrup - The C++ programming langage 3rd Edition


 
 :sol:  


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°1428323
Trap D
Posté le 21-08-2006 à 00:25:16  profilanswer
 

Attention, Bjarne Stroustrup parle du C++, pas du C.
Mais il est vrai que NULL est défini dans stddef.h et peut varier d'une implémentation à l'autre.

n°1428605
doton
Malloc could not alloc memory.
Posté le 21-08-2006 à 14:27:56  profilanswer
 

j ai donné fonction car elle je l ai codé pour qu'elle soit le plus generique possible (elle permet de parser a peu pres toutes chaines de caracteres en fonction d un caractere delimiteur).
 
desole de ne pas avoir verifier la valeur de retour de mon malloc mais cette fonction a 4 ans et je debutais a l epoque en C ... j avais pas encore tous les automatisme.
 

Citation :

on donne pas de solutions toutes cuites svp. surtout bugguées et incomplètes.


 
j ai pas donné de solution toute cuite ... j ai juste donné une fonction qui pourrait l aider, un exemple vaut mieux qu un long discours. Bugguées ??? dis moi ou tu as vu un bug ...
 
petite precision pour my_strndup -> cette fonction prend en parametre un pointeur sur la chaine de caracteres et le nombre de caracteres (n) a copier puis alloue n+1 caracteres, duplique le morceau de chaine en ajoutant le '\0' a la fin, et enfin retourne la chaine dupliquée.

Message cité 1 fois
Message édité par doton le 21-08-2006 à 14:56:17
n°1428610
Elmoricq
Modérateur
Posté le 21-08-2006 à 14:30:59  profilanswer
 

doton a écrit :

j ai juste donné une fonction qui pourrait l aider


 
 [:uxam]


Message édité par Elmoricq le 21-08-2006 à 14:31:12
n°1428719
doton
Malloc could not alloc memory.
Posté le 21-08-2006 à 17:03:38  profilanswer
 

Citation :

Enfin, ne poster qu'une partie de la solution ne doit pas vraiment aider.


en meme temps avec ce que j ai donné, la solution n est pas difficile a trouver ... il suffit juste de parcourir le tableau retourné en partant de la fin et d afficher les mots un par un dans une boucle en ajoutant les espaces manquants

n°1430616
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-08-2006 à 13:22:11  profilanswer
 

kiooik a écrit :

j'aimerais savoir comment inverser les mots d'une phrase dans un programme

Quelle est ta question sur le langage C ?
Tu as oublié de poster le code avec lequel tu as un problème.
 
Pour les questions d'algorithmes, voir le forum ALGO, mais ton cas est un peu élémentaire...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  programme

 

Sujets relatifs
Importer des données excel sur le web vers un programme VBAPorter un programme C++/QT sous windows
Programme pour lire une matrice triangulaire inférieure à partirModélisation d'un problème à l'aide d'un programme informatique
utiliser un Hook dans un programme wxWidgetsrecherche programme d'ouverture/fermeture pour pc
Comment imprimer et mieux présenter un programme?Appel d'un programme extérieur sous Solaris.
[résolu]Lancer un programme au demarrage de windowsProbleme sur petit programme de débutant
Plus de sujets relatifs à : programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR