IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

disperser les espaces dans une ligne


Sujet :

C++

  1. #21
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    désolé je me suis trompée pour mes espaces il faut faire:
    espace_restant/ nb_mot
    et
    espace_restant% nb_mot (au cas ou que ta division est un reste)

    et tu veut dire quoi quand tu dit:


    tu entend quoi par STL, j'ai jamais fait ou je sais pas que ça s'appelle comme ça.
    Et sinon alors t'en pense quoi de ma "sorte d'algo". Bon pas bon? A refaire, à modifier? Dit moi?
    Pour la division, efectivement c'est plus logique :p

    La stl, c'est tout les beaux objets standart que tu utilise snas le savoir, notament cin et cout, mais aussi les conteneurs, les algoritmes de traitement, les type comme std::exception... c'est une part très importante du C++...

    En gros en parlant de la stl, je voulais t'inciter à utiliser un std::string a la palce d'un tableau de caractère... std::string possèdent des métodes pour extraire certaine chaine, un caractère particulier, efectuer la recherche d'un caractère... bref. Et sela sans compter les multitudes de fonctionalité contenu dans le header algoritme
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben alors ça fait la même chose que ce que j'ai fait avant non? Y'a quoi de different? ou j'ai pas bien saisi ce que je doit faire?

  3. #23
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    Y'a quoi de different?
    Tout
    Citation Envoyé par widi70
    ou j'ai pas bien saisi ce que je doit faire?
    Ou ce qu tu a fait.

    Esseille de réécrire un code en efectuant ce que tu a décris. (Et par pitier utilise des commentaires à bon escient si tu veut que on (et c'est la même chose pour ton prof) te relise... Ca ne sert à rien de commenter // Debut de la fonction, par contre // Ajout de N espaces ca peut servire :p)
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #24
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Citation Envoyé par widi70
    bon alors j'ai penser à ça vous me dites ce qui va ce qui va pas et pourquoi:
    1-je prend le texte et le nombre (l) entré par l'utilisateur.
    2-je compte les caracteres dans le texte.
    3-A l caractere je vais à la ligne en faisant attention de ne pas couper un mot.
    4-Je prend les lignes qui sont creer et je les met dans un tableau pouvant contenir au maximum 81 caracteres (80 caracteres max + '\0').
    5- Je compte le nombre de mots pour chaque ligne nouvellement creer (avec un tant que).
    6- je compte le nombre de caracteres pour chaque ligne nouvellement creer.
    7- je calcul le nombre d'espace à rajouter (avec nb_caractere-l)
    8- je calcul ou je doit mettre mes espaces (avec nb_mots/nb_caractere que je rajoute puis nb_mots%nb_caractere que je rajoute a nouveau).
    2- Pourquoi faire? Cela ne sert à rien

    3- Toujours le même problème: tu as mis ton algo à plat, tu réfléchis en termes de caractères, et c'est inadapté au fait que tu peux avoir à rejustifier un texte qui avait été précédemment justifié sur une largeur différente.
    Du coup, combien même tu trouves ce qui te sembles être le dernier mot, c'est loin d'être évident qu'il s'agisse du dernier mot car ton texte initial va contenir
    Et qu'en rejustifiant avec un caractère de plus tu devras obtenir
    . En réfléchissant avec des caractères, seul un sale hack va te permettre de faire une pirouette. Alors qu'en réfléchissant "mot", cela aurait été clean.

    4- Ca me parait artificiel. Mais si maintenant on vous enseigne du C avec les flux C++ on ne vas pas pouvoir te montrer comment on peut faire plus simplement

    Pour les reformules, je ne me suis pas amusé à vérifier. Trop tard pour cela il est.

    Pour la SL (bibliothèque standard du C++), c'est ce qui aurait permis d'ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (std::cin >> word) {   // pour lire les mots
    ...
    word.length() // pour obtenr la longueur d'un mot
     
    words_buffer.push_back(word); // pour mémoriser un nouveau mot
    words_buffer.size(); // pour savoir combien de mots sont mémorisés
    words_buffer.clear(); // pour vider le tampon de mots mémorisés
    Il va sans dire que sans cela, c'est plus pénible à faire.

    PS: La STL est une appelation historique qui ne concerne pas les flux.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    Vous ne voudriez pas me donner les grandes ligne de votre algo car je ne comprend vraiment pas ou vous voulez en venir.
    Merci

  6. #26
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    Vous ne voudriez pas me donner les grandes ligne de votre algo car je ne comprend vraiment pas ou vous voulez en venir.
    Merci
    Ca je l'ai déjà fait dans un de mes post précédent...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ah oui j'ai oublier de le dire j'ai pas le droit d'utiliser des strings car on ne les ça pas encore vus en cours donc voila.

  8. #28
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Citation Envoyé par widi70
    Vous ne voudriez pas me donner les grandes ligne de votre algo car je ne comprend vraiment pas ou vous voulez en venir.
    Merci
    C'est dans le message #11. Je l'ai testé avec la SL (string, vecteurs, & cie) en 20minutes, et c'est au poil.

    Prévoit de recopier ton entrée mot après mot dans un buffer temporaire où les espaces superflus auront été effacés.
    Et une fois la longueur atteinte, tu réintroduis les espaces en re-récupérant chaque mot -- quoique potentiellement, il n'y a que (L+1)/2 mots par lignes, ce qui peut permettre de garder un tableau d'index sans avoir à repartir sur du sscanf ou du strtok.

    Du coup ... avec ta contrainte de faire du C, je ne suis pas sûr que tu sois vraiment dans le bon forum (à la limite si tu utilises std::cin, et encore)

    Et n'oublies pas que
    Citation Envoyé par Ton prof
    Votre dossier de conception doit donc commencer, comme pour tout algorithme, par la description du résultat en langage naturel, puis une idée générale de l'algorithme donnant les grandes phases, puis enfin les raffinements successifs de chacune de ces phases
    Dit autrement :
    - d'abord l'algo générique
    - ensuite des détails sur comment certaines phases sont réalisées
    - pas la peine : les détails de codage
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    pourquoi getline il le prend mon compilateur, om ma dit que c'etait du c++ enfin je modifierais. mai sinon y'a cin.read ça pourrais marcher pour qu'il prenne en compte les retour à la ligne?
    Sinon avec la SL tu prend toute des fonctions toute faites je pense pas que ce soit le top pour un projet de cours si?
    merci

  10. #30
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    pourquoi getline il le prend mon compilateur, om ma dit que c'etait du c++ enfin je modifierais. mai sinon y'a cin.read ça pourrais marcher pour qu'il prenne en compte les retour à la ligne?
    Sinon avec la SL tu prend toute des fonctions toute faites je pense pas que ce soit le top pour un projet de cours si?
    merci
    Ces fonctions "toute faite" comme tu dit sont une part entière du C++. Quand à être les "meilleurs", elles on l'aventage de fonctioner sur toute les plates formes disposant d'un compilatuer c++ (Ca vas du pc à la console de jeu :p)
    Maintenant si ton prof veut que tu ré-écrive la SL...
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben vu que tout peut se faire par des boucle je pense quand même qu'il prefererai qu'on fasse tout.

  12. #32
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Citation Envoyé par widi70
    ben vu que tout peut se faire par des boucle je pense quand même qu'il prefererai qu'on fasse tout.
    Je vois pas le raport entre utiliser des boucles et utiliser la SL... O_o
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben par exemple:

    Pour la SL (bibliothèque standard du C++), c'est ce qui aurait permis d'ecrire

    Code :
    while (std::cin >> word) { // pour lire les mots
    ...
    word.length() // pour obtenr la longueur d'un mot

    words_buffer.push_back(word); // pour mémoriser un nouveau mot
    words_buffer.size(); // pour savoir combien de mots sont mémorisés
    words_buffer.clear(); // pour vider le tampon de mots mémorisés
    on est d'accord tout ça peut se faire avec des boucles ???

  14. #34
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Citation Envoyé par widi70
    pourquoi getline il le prend mon compilateur, om ma dit que c'etait du c++ enfin je modifierais. mai sinon y'a cin.read ça pourrais marcher pour qu'il prenne en compte les retour à la ligne?
    Sinon avec la SL tu prend toute des fonctions toute faites je pense pas que ce soit le top pour un projet de cours si?
    Hum... Pour info, que t'a-t-on montré en cours ? Comment es-tu sensée savoir lire des informations dans le flux entrant ?
    Si on t'as montré std::istream::getline, très bien! C'est OK. Si on t'a montre std::getline, c'est encore mieux (mais j'en doute vu que tu n'es pas sensée savoir ce qu'est une std::string). Cela va quand même être compliqué. Mieux vaut utiliser l'opérateur d'extraction si tu veux un code simple (j'aurais jamais cru re-dire une hérésie pareille).
    Si on vous as montré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char mot[80];
    while (std::cin >> mot) {
    C'est ce que tu auras de plus simple pour lire tes mots. Cependant, dans un vrai programme c'est à bannir (avec un std::string, c'est parfait, avec un tableau de caractères une catastrophe). Du coup, ne t'en sers pas si vous avez été mis en gardes, et part sur du plus compliqué à coups de getline en attendant que l'on vous montre les std::string.

    Maintenant, si on ne t'a rien montré de tout cela, retour à la case C.


    Quant à la SL, elle fait parti du langage. Certes dans des TDs, il est bon de savoir comment elle fonctionne. Mais après, il faut savoir profiter des abstractions qu'elle offre pour s'éloigner des détails, et mettre en oeuvre plus simplement nos algorithmes.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  15. #35
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    oui voila c'est exactement ça que l'on ma montré avec des char. Donc mon programme quand même au debut c'est bon ce que j'avais fait mise a part pour compter les caracteres, non??
    je suis en 1er année d'info donc voila faut pas aller trpo vite!!!!
    merci

  16. #36
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    Citation Envoyé par widi70
    oui voila c'est exactement ça que l'on ma montré avec des char. Donc mon programme quand même au debut c'est bon ce que j'avais fait mise a part pour compter les caracteres, non??
    je suis en 1er année d'info donc voila faut pas aller trpo vite!!!!
    Sinon vous ne voudriez pas me donner un algo clair et precis car j'ai de plus en plus de mal à vous comprendre, il me reste plus que 3jours, SVP. Vous me dites tu fait ça ça et ça, ben voila je sais quoi faire car la.....
    Je suis en 1er année info, il ne faut pas de fonction toute faite comme dans la SL et il ne faut pas de strings mais que des char, voila je crois que j'ai a peu pres tout resumé. Aidez moi SVP
    merci

  17. #37
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    On ta déjà doner les détailles de l'algorithme, maintenant il faut coder... Si tu rencontre des dificultées sur certains points de l'implémentation qui sont relatife au langage, nous pourons surement te venir en aide. Mais nous n'allons pas te doner directement la source d'un programme fonctionel... (Du moin pas moi)

    Nb : Ne pas confondre editer et citer :p
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  18. #38
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    ben j'ai pas compris ce que vous vouliez me dire.
    Vous voudriez me redonner une sorte d'algo comme par exemple:
    un 1 tu fait ça en 2 .... en 3.... etc etc
    svp

  19. #39
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    bonjour tout le monde
    Vous pourriez me donner un coup de main pour compter les mots sans utiliser de fonction toute faire.
    Merci d'avance

  20. #40
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Pour compter les mots provenant de std::cin
    ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (std::cin >> mot)
    et tu incrémentes au fur et à mesure.
    Ne pense même pas à utiliser autre chose.

    Si tu reprends l'ago que je t'ai donné plus tôt, tu pourrais te dire que ce ne sont pas les mots de std::cin que tu dois compter, mais ceux mémorisés et en attente de justification.
    Le comptage va dépendre que comment tu mémorises tes mots:
    * avec les vecteurs, ... il y a un fonction .size() comme je l'avais précisé plus tôt.
    * si tu utilises ta propre structure de liste chainée, il devrait en être de même
    * si tu stockes au fur et à mesure tes mots de départ dans un buffer de caractères (je te vois difficilement pouvoir utiliser une autre solution), tu auras deux choses à faire
    1- savoir combien de mots ont été mémorisés (pour cela il suffit d'incrémenter un compteur que tu remets à zéro à chaque purge)
    2- savoir découper l'ensemble des mots présents dans le buffer de caractères. Au choix : a- tu passes par un istringstream, et tu (re-)utilises l'opérateur >> ; b- tu utilises strtok (il est fait pour ça!) ; c- tu recherches le prochain espace (ou autre caractère que tu auras choisi pour séparer tes mots), en faisant attention à ne pas chercher au delà du dernier caractère dans ton buffer.
    * plutôt qu'un buffer de caractères, il y a moyen de bourriner et d'utiliser un tableau statique de chaines de caractères (elles même des tableaux statiques) -- théoriquement, selon les spécs de l'exercice, les dimensions max sont [(80+1)/2][81]. Et tu te retrouves à devoir adapter les 1- et 2- à cette structure.

    Ne pas penses même pas à esquiver l'utilisation d'un buffer intermédiaire des mots en attente de justification pour une ligne -- quelle que soit la représentation que tu lui choisis.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Supprimer les espaces dans une chaine de caractères
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 23/07/2007, 22h24
  3. Effacer les espaces dans une chaîne de caractères
    Par JohnnyWalk dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 19/07/2007, 14h13
  4. supprimer les espaces dans une chaîne de caratères.
    Par Empty_body dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2006, 18h43
  5. [VB6]Gérer les espaces dans une command FTP
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/07/2006, 21h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo