Partage
  • Partager sur Facebook
  • Partager sur Twitter

L'utilisation de map pour comparer chaque mot

    13 janvier 2020 à 13:57:02

    Apres beaucoup d'aide de votre part j'ai avancée mais je n'ai pas tout a fait aboutie ce que je voulais faire.

    Donc je souhaite comparer toutes les lignes d'un fichier à partir du 3ème mot (qui est "TO") et si deux lignes sont identiques je dois les fusionner.

    Exemple ; ceci est mon fichier texte :

    STATE a TO a x b b OUT 0 x 0 1
    STATE b TO a x b b OUT 0 x 0 1
    STATE c TO d b b b OUT 0 1 1 0 
    STATE d TO c b b b OUT 0 1 1 0 
    STATE e TO d b b b OUT 0 1 1 0 

    Et voila ce que j'ai besoin d'obtenir :

    STATE ab TO a x b b OUT 0 x 0 1
    STATE ce TO d b b b OUT 0 1 1 0 
    STATE d TO c b b b OUT 0 1 1 0 

    c'est mon code, il supprime la deuxième ligne si 2 sont identiques mais je n'ai pas trouvé comment fusionner les STATE (a, b ,c..) .

    Je pense que je dois utiliser la map 2D et je ne sais pas comment l'utiliser dans ces conditions.

    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <sstream>
    #include <string>
    #include <map>
    
    using namespace std;
    
    int main() {
        map<std::string, std::string> _map;
        map<string, string>::iterator it;
        string str1, str2;
        ifstream reader("Hajer.txt"); // my file
        while (getline(reader, str2)) {
            str1 = str2.substr(0, 8); // I compare them beginning from "TO"
            str2.erase(0, 8);
            _map[str2] = str1;
        }
        reader.close();
        ofstream writer("New_Hajer.txt"); // the result
        for (it = _map.begin(); it != _map.end(); ++it)
            writer << it->second << it->first << '\n';
        writer.close();
        return 0;
    }

    Merci pour votre aide

    -
    Edité par HajerHraiech 13 janvier 2020 à 14:06:26

    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2020 à 22:04:04

      Dans ta boucle while, utilises it = _map.find(str2), puis selon le résultat tu fais it->second += str1 ou _map[str2] = str1
      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2020 à 13:42:16

        Salut,

        Inutile de chercher si ta ligne est déjà présente dans ton conteneur, std::map n'autorise pas de clefs en doublons, utilise cela à ton avantage.

        Et tu nous parles de "STATE", mais on ne voit pas cette notion dans ton code.

        -
        Edité par Deedolith 14 janvier 2020 à 13:55:46

        • Partager sur Facebook
        • Partager sur Twitter

        L'utilisation de map pour comparer chaque mot

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown