Comment fait-on pour supprimer les doublons dans un fichier ?
je sature depuis 5 jours et je comprend rien à cela.
exemple : contenu du fichier : bonjour je suis suis nouveau
il faut supprimer le mot "suis".
Comment fait-on pour supprimer les doublons dans un fichier ?
je sature depuis 5 jours et je comprend rien à cela.
exemple : contenu du fichier : bonjour je suis suis nouveau
il faut supprimer le mot "suis".
Bonjour,
pourquoi vouloir le faire en C++ ?
En script, par exemple python, c'est l'affaire de quelques minutes.
Sinon, l'idée est assez triviale quelque soit le langage:
- tenir une liste des mots rencontrés
- parcourir le fichier
- vérifier chaque mot
![]()
Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
Un peu de programmation réseau ?
Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.
Bah c'est imposer par mon prof.
J'ai fait ceci mais je comprends pas pourquoi j'ai ce résultat.
Le résultat de ce programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <iostream> #include <string> #include <vector> #include <sstream> using namespace std; int main() { string text = "je suis suis nouveau"; vector <string> vecStr; istringstream ss(text); while(ss) { ss >> text; vecStr.push_back(text); } for(int unsigned i=0;i<(vecStr.size());i++){//supr des doublons if(vecStr[i].compare(vecStr[i+1]) == 0){ vecStr.erase(vecStr.begin()+i); } } for(int unsigned i=0;i<(vecStr.size());i++){//reconstitution de la chaine text +=vecStr[i]; if(i < (vecStr.size()-1)){ cout << text <<endl; } } }
nouveauje
nouveaujesuis
alors que moi je veux : je suis nouveau.
Bonjour,
Tu n'es pas très loin d'avoir une solution qui marche. Quelques corrections :
1) Le while(ss) va faire un dernier tour de boucle une fois le dernier mot parsé et écrire en double le dernier mot dans le std::vector, il vaut mieux faire :
2) Les .compare sont difficiles à lire. Vu que les std::string savent se comparer entre elles par l'opérateur == tu peux écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while (ss >> text) { vecStr.push_back(text); }
3) Pas besoin de mettre des parenthèses autour de (vecStr.size())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (vecStr[i] == vecStr[i + 1])
4) Enfin pour le bug lui-même, La string text contient encore le dernier mot parsé "nouveau", avant que tu reconstitue le texte avec les mots sans doublon, donc il faut la vider avant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 text.clear(); for (int unsigned i = 0; i < vecStr.size(); i++){//reconstitution de la chaine text += vecStr[i]; } cout << text << endl;
Bonjour,
Merci pour ton aide.
j'ai corrigé mes erreurs mais lorsque j’exécute mon programme il m'affiche : "je suis" sans le "nouveau"
Salut, dans les sources que j'ai poste sur developpez j'ai notamment fait un namespace avec des fonctions template comme split et join. Si ca t'interesse tu n'as qu'a y jeter un coup d'oeil.
Normalement avec les corrections de Arzar ca devrait fonctionner. Poste ton nouveau code.
Merci je vais jeter un coup d’œil.
Euh finalement le code marche.
Merci encore pour votre aide.
Bonne journée.
Partager