programme - C - Programmation
Marsh Posté le 09-08-2006 à 13:49:50
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.
Marsh Posté le 09-08-2006 à 14:20:58
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.
Marsh Posté le 09-08-2006 à 14:28:04
Ouais moi je pensais à mettre les mots dans un tableau et reparcourir le tableau ...
Enfin bref.
Marsh Posté le 09-08-2006 à 15:06:17
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().
Marsh Posté le 09-08-2006 à 15:14:42
ReplyMarsh Posté le 09-08-2006 à 15:23:03
Je suis débutant en c...alors si vs pouviez faire un petit exemple...c'est tjs plus parlant
Marsh Posté le 09-08-2006 à 15:39:19
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
Marsh Posté le 18-08-2006 à 15:37:24
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 :
|
Marsh Posté le 20-08-2006 à 01:08:43
ReplyMarsh Posté le 20-08-2006 à 09:26:34
Taz a écrit : on donne pas de solutions toutes cuites svp. surtout bugguées et incomplètes. |
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 ?
Marsh Posté le 20-08-2006 à 17:01:40
Bah rien que my_strndup et le fait que tu ne testes pas le retour de malloc donc.
Marsh Posté le 20-08-2006 à 17:23:57
_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 ?
Marsh Posté le 20-08-2006 à 18:12:07
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.
Marsh Posté le 20-08-2006 à 18:54:56
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.
Marsh Posté le 20-08-2006 à 20:15:23
Sans compter que c'est un brin inutilement compliqué comme programme, pour la tache à effectuer.
Marsh Posté le 20-08-2006 à 20:28:31
Elmoricq a écrit : Sans compter que c'est un brin inutilement compliqué comme programme, pour la tache à effectuer. |
c'est clair
Marsh Posté le 20-08-2006 à 20:50:38
Elmoricq a écrit : Sans compter que c'est un brin inutilement compliqué comme programme, pour la tache à effectuer. |
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
Citation : Note that using the integer 0 as the terminator would not have been portable: on some imple- |
Marsh Posté le 21-08-2006 à 00:25:16
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.
Marsh Posté le 21-08-2006 à 14:27:56
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.
Marsh Posté le 21-08-2006 à 14:30:59
doton a écrit : j ai juste donné une fonction qui pourrait l aider |
Marsh Posté le 21-08-2006 à 17:03:38
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
Marsh Posté le 24-08-2006 à 13:22:11
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...
Marsh Posté le 09-08-2006 à 13:46:27
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