// Programme C++ // Élimine les lignes dupliquées dans un fichier *.dat du répertoire dataF2w // Auteur: R. Simard #include #include #include #include #include using namespace std; int main (int argc, char *argv[]) { if (argc < 3) { cerr << "\n Usage: a.out \n\n"; return -1; } vector V; ifstream in (argv[1]); if (!in) { cerr << "\n Erreur: ouverture du fichier " << argv[1] << "\n\n"; return -1; } ofstream out (argv[2]); string line; // Lire tout le fichier et mettre les lignes dans V while (getline (in, line)) V.push_back(line); bool isDuplicate = false; int N = V.size(); // Le premier polynôme se trouve à la ligne 4 (en comptant de 0) int i = 5; int j; while (true) { if (i >= N) break; isDuplicate = false; j = 4; // 2 lignes identiques: on permute la ligne répétée avec la dernière // ligne et on diminue N de 1. Plus rapide que d'éliminer la ligne. while (true) { if (V[j] == V[i]) { isDuplicate = true; V[i] = V[N - 1]; N--; i--; break; } j++; if (j >= i) break; } i++; } ostringstream Nstr; // Le nombre de polynômes a changé Nstr << (N - 4) << " # number of generators defined"; V[3] = Nstr.str(); for (int i = 0; i < N; i++) out << V[i] << "\n"; }