2017-08-30 1 views
0

Je suis dans une classe où nous apprenons le C++, et notre premier projet consiste à lire les données d'un fichier texte, à effectuer diverses vérifications sur ces données et à les exporter vers un autre déposer sous une forme légèrement modifiée.Déterminer si les valeurs du fichier texte sont uniques

Les données d'origine ont des colonnes séparées par des espaces. Nous devons vérifier la première colonne (un ID) pour s'assurer que chaque rangée a un ID unique. Nous sommes également supposés vérifier la 10ème colonne pour s'assurer qu'elle a l'une des quatre valeurs. Je n'ai aucun problème à vérifier la 10ème colonne, mais j'ai un problème en vérifiant si l'identifiant de chaque ligne est unique.

En Java, j'ajouterais chaque ID à un vecteur ou à un tableau, puis vérifierais si le vecteur contient chaque élément suivant et lancerais une erreur si c'est le cas. Mais, nous ne sommes autorisés à inclure trois en-têtes dans notre projet.

#include <iostream> 
#include <iomanip> 
#include <string> 

Donc, je ne peux pas vérifier les ID uniques en utilisant des vecteurs ou des tableaux. Toute aide sur ce que je pourrais faire ici serait grandement appréciée.

+1

Avoir une chaîne qui accumule une liste de tous les ID rencontrés jusqu'à présent, séparés par un caractère qui ne peut pas apparaître dans un ID. Utilisez 'string :: find' pour vérifier si chaque nouvel identifiant est déjà apparu. –

+2

Si vous n'êtes autorisé que ces 3 en-têtes, comment lisez-vous les données d'un fichier? Ou le fichier est-il redirigé vers stdin à partir de la ligne de commande? –

+0

@BenjaminLindley, je pense qu'il est canalisé. Les enseignants font cela – Pranay

Répondre

0

Vous pouvez créer un tableau d'une chaîne dans C++ et stocker des ID dans ce tableau. puis utilisez cette boucle pour vérifier les éléments en double.

for(int i=0; i<s.length(); i++) 
    { 
     for(int j=i+1;j<s.length();j++) 
     { 
      if(s[i]==[j]) 
      { 
       cout<< s[i] << " is duplicate"; 
      } 
     } 
    } 

Espérons que ça aide.

0

quelque chose comme ça. Ceci est bien pour l'exercice en classe puisque vous apprenez. Je ne recommande pas cela pour la production.

class myvector{ 
const int maxsz = 1000; 
std::string data[maxsz]; 
int currentsz; 

void insert(); //increment size; 
std::string get(int); //retrieve an index; 
bool compareToAll(const std::string& val) { 
    for(int i = 0; i < currentsz; ++i) { 
     if(val == data[i]) return true; 
     } 
    return false; 
    } 

}; 

Idéalement, j'utiliserais un ensemble ou unordered_set. le vecteur est n^2;

Puisque vous apprenez, je recommanderais d'essayer de surcharger les opérateurs.