Aide pour structures et vecteurs c++

Fermé
peternice - Modifié par peternice le 31/01/2014 à 12:57
Bonjour,

j'ai réalisé un programme permettant de lire des fichiers fasta en séparant l'identifiant de la séquence et j'aimerai récupérer ces données dans un tableau. On m'a dit qu'utiliser les structures et les vecteurs était le moyen le plus simple d'y parvenir. Suite à ce conseil, j'ai essayé d'intégrer cela dans mon programme. Je pense avoir placé les lignes concernant la structure aux bons endroits, cependant je ne sais pas ou placer les lignes concernant le vecteur ("vector<Mystruct> tableau;" et "tableau.push_back(obj);") ni comment afficher le tableau.

En vous remerciant d'avance


voici mon code:


#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct mystruct
{
string id, s;
};

int readfasta ( string filename ) {

//3 variables utilsées plus tard
string line, identifiant, seq;
mystruct obj;

// ouvre le fichier (et le converti en tableau de char, car ifstream ne prends par les strings)
ifstream fichier(filename.c_str());

// teste si fichier ok (bon chemin, etc...)
if (!fichier) {
cout<<"Probleme avec fichier";
}

// lit chaque ligne du fichier
while( getline( fichier, line ) ){

// si on tombe sur une nouvelle proteine (=>nouvel identifiant) ou ligne vide
if( line.empty() || line[0] == '>' ){

if( !identifiant.empty() ){ // si identifiant déja mémorisé au moins une fois

cout << identifiant << " \n " << seq << "\n\n"; //affiche l'id et la sequence précedement mémorisée
identifiant.clear(); //efface ce qu'il y a dans identifiant

}

if( !line.empty() ){
//memorise l'identifiant (sauf premier caractere c.a.d. le ">")
identifiant = line.substr(1);
//note : on peut couper au caratere "|" pour raccourcir l'id, en faisant :
identifiant=identifiant.substr(0, identifiant.find("|"));
obj.id=identifiant;
}

seq.clear(); // efface la sequence precedente (si elle existait avant)

}

//si pas de ligne avec identifiant et variable identifiant vide => c'est une ligne avec la sequence
else if( !identifiant.empty() ){

seq += line;
obj.s=seq;
}
}

// affichage pour la derniere sequence du fichier
if( !identifiant.empty() ){
cout << identifiant << " \n " << seq << "\n";

}

return 0;

}


int main() {

readfasta("seq_mimivirus.faa");

return 0;

}