Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/08/2020, à 16:50

chris7522

Conversion de flux d'entrée C++

Bonjour a tous ,
Dans ce code , je ne comprends pas ce que signifie :

flux.str(std::string {});

Peut etre pour afficher ?

std::string traitement_chaine(std::string const & chaine)
{
    std::string copie { chaine };

    auto premier_non_espace { std::find_if_not(std::begin(copie), std::end(copie), isspace) };
    copie.erase(std::begin(copie), premier_non_espace);

    std::reverse(std::begin(copie), std::end(copie));
    premier_non_espace = std::find_if_not(std::begin(copie), std::end(copie), isspace);
    copie.erase(std::begin(copie), premier_non_espace);
    std::reverse(std::begin(copie), std::end(copie));

    return copie;
}
.
std::ostream & operator<<(std::ostream & sortie, Artiste const & artiste)
{
    sortie << artiste.nom;
    return sortie;
}

std::ostream & operator<<(std::ostream & sortie, Album const & album)
{
    sortie << album.nom;
    return sortie;
}

std::ostream & operator<<(std::ostream & sortie, Morceau const & morceau)
{
    sortie << morceau.nom << " | " << morceau.album << " | " << morceau.compositeur;
    return sortie;
}

std::istream & operator>>(std::istream & entree, Morceau & morceau)
{
    std::string mot {};
    std::ostringstream flux {};

    while (entree >> mot && mot != "|")
    {
        flux << mot << " ";
    }

    std::string nom_morceau { flux.str() };
    if (std::empty(nom_morceau))
    {
        nom_morceau = "Morceau inconnu";
    }
    morceau.nom = traitement_chaine(nom_morceau);
    flux.str(std::string {});

    // Récupération du nom de l'album.
    while (entree >> mot && mot != "|")
    {
        flux << mot << " ";
    }

    std::string nom_album { flux.str() };
    if (std::empty(nom_album))
    {
        nom_album = "Album inconnu";
    }
    morceau.album.nom = traitement_chaine(nom_album);
    flux.str(std::string {});

    while (entree >> mot)
    {
        flux << mot << " ";
    }

    std::string nom_artiste { flux.str() };
    if (std::empty(nom_artiste))
    {
        nom_artiste = "Artiste inconnu";
    }
    morceau.compositeur.nom = traitement_chaine(nom_artiste);
    flux.str(std::string {});

    return entree;
}

Et si je peux me permettre , je ne comprends pas quel est le role de :
assert

void test_creation_morceau_entree_complete()
{
    std::istringstream entree{ "Frica | Frica | Carla's Dreams" };
    Morceau morceau{};

    entree >> morceau;

    assert(morceau.nom == "Frica" && u8"Le nom du morceau doit être Frica.");
    assert(morceau.album.nom == "Frica" && u8"Le nom de l'album doit être Frica.");
    assert(morceau.compositeur.nom == "Carla's Dreams" && u8"Le nom du compositeur doit être Carla's Dreams.");
}

Dernière modification par chris7522 (Le 19/08/2020, à 17:25)

Hors ligne

#2 Le 21/08/2020, à 18:27

Nuliel

Re : Conversion de flux d'entrée C++

Bonjour,
assert c'est pour lever une assertion, en gros si la condition de l'assertion n'est pas vérifiée, le programme s'arrête. C'est utile pour du debug.
J'ai trouvé https://en.cppreference.com/w/cpp/langu … ialization pour l'autre question, tu es dans le cas T object {}; après je ne comprends pas trop l'intérêt de ça ni ce que ça fait, mais j'ai l'impression que ça initialise la chaine de caractère avec une chaîne vide

Dernière modification par Nuliel (Le 21/08/2020, à 18:32)

Hors ligne

#3 Le 22/08/2020, à 18:08

chris7522

Re : Conversion de flux d'entrée C++

Ok je comprends mieux . Je te remercie de ton aide smile

Hors ligne

#4 Le 22/08/2020, à 18:35

Nuliel

Re : Conversion de flux d'entrée C++

J'ai oublié de préciser qu'il est possible de désactiver les assertions à la compilation avec -DNDEBUG (donc les assertions peuvent rester dans le code et être désactivées)

Hors ligne

#5 Le 23/08/2020, à 18:14

chris7522

Re : Conversion de flux d'entrée C++

Merci de ton aide .
      En fait , je suis en plein questionnement . J'apprends le C++ depuis 2 ou 3 mois environ et pour ce qui est d'apprendre les bases , il n'y a aucun problème pour trouver du contenu en francais . Plus j'avance dans mon apprentissage , et plus je me rend compte qu'il est difficile voir impossible de trouver des cours / livres qui prennent en compte les nouvelles normes ( je ne suis pas anglophone).
     Dans la boite de mon voisin, tous travaillent en Python , et il se demande pourquoi je persiste a me prendre la tete a apprendre un language difficile . Je lui réponds que je ne vais pas changer de language a chaque fois que je rencontre des difficultés , mais je commence a me demander s'il n'a pas raison .   
    Et pour compliquer les chose , je suis déficient visuel , donc avant que je puisse faire des choses concretement interessante , il risque de se passer pas mal de temps .
    Finalement ce qui me pose le plus de probleme , ce n'est pas la difficulté mais le manque de contenu en francais lorsqu'on commence a faire des choses plus complexe . Mais peut etre que je n'ai pas bien cherché
   Quel est votre avis ?

Hors ligne

#6 Le 23/08/2020, à 18:48

Nuliel

Re : Conversion de flux d'entrée C++

Tu peux faire des choses très intéressantes sans utiliser les fonctionnalités du C++11, juste avec les bases de C++
Comprendre l'anglais est très important, pour avoir du contenu récent et qualitatif c'est souvent obligatoire. J'ai beaucoup appris justement en lisant des livres en anglais, c'est comme ça que je progresse (en cas de doute sur une phrase, j'utilise deepl mais j'essaie au maximum de ne pas l'utiliser). Par contre mon expression orale en anglais est absolument ignoble, ce qui est normal puisque je ne la travaille pas.
Python c'est cool, le MOOC python 3 sur fun-mooc est vraiment génial et permet de faire un tas de trucs, après les notions utilisées en C et C++ reviennent aussi dans d'autres langages, donc c'est pas perdu non plus. Quant à comparer python et C++, chacun a ses avantages et ses inconvénients.
Je pense qu'il serait préférable de faire des petits projets plutôt que de vouloir comprendre toutes les subtilités du C++11 par exemple.

Dernière modification par Nuliel (Le 23/08/2020, à 18:49)

Hors ligne

#7 Le 24/08/2020, à 11:26

chris7522

Re : Conversion de flux d'entrée C++

Merci . Ce voisin m'a dit qu'en python , il y avait pas mal de bibliotheques pour faire a peu pres tout ce qu'on veut . J'ai l'impression qu'il y a plus de contenu en francais également .

Hors ligne

#8 Le 24/08/2020, à 11:43

Nuliel

Re : Conversion de flux d'entrée C++

Oui c'est vrai, il y a plein de bibliothèques en python pour faire tout un tas de choses. Cela dit il y en a aussi pas mal en C et C++.
Je ne suis pas sûr qu'il y ait vraiment plus de contenu en français en dehors des bases.
Mais on peut avoir les mêmes réflexions en python qu'en C++: on n'est pas obligé de maîtriser les itérateurs par exemple pour pouvoir faire un projet en python.
Apprendre l'anglais est un bon investissement, je te l'assure wink (il y a bbc learning english qui est pas mal, il y a aussi une radio australienne dont j'ai oublié le nom que je trouvais bien car plus facile à comprendre que de l'américain, et sinon recherches en anglais obviously wink )

Hors ligne