PDA

Visualizza la versione completa : [C++] Aiutino per le struct


Shea
09-02-2005, 12:13
Mi servirebbe un aiuto per capire meglio le struct, mi stato consigliato per risolvere un problema di utilizzare le struct, ho guardato sul libro e il loro uso mi si complicato piuttosto che chirirlo.
Quello che serve a me di tirar fuori dei dati posti all'interno di un vettore che legge da file di testo ed inserirli all'interno di variabili.
Il file attualmente legge tutto ci che c' nel documento di testo e le stampa a video. Ora vorrei capire come con l'uso della struct sia possibile valorizzare queste variabili.

questo ci che ho fatto attualmente:


#include <string>
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;

int main() {
vector<string> parola;
ifstream in("postit.txt");//Apro la lettura del file
string linea;
while (getline(in, linea,'\n'))
parola.push_back(linea);
for(int i = 0; i < parola.size(); i++)
cout << i << ": " << parola[i] << endl;

struct Contenuto titolo, corpo, data;
}


struct Contenuto {
char titolo, corpo, data;
} tabulati;


Da qui non so pi che pesci pigliare :bh:

netarrow
09-02-2005, 12:57
Prima di tutto la struttura la devi dichiarare prima del main, senn il compilatore non la trova.
Dopo che hai creato un tipo di dato come Contenuto passi alle varaibili o gli oggetti persenti dentro la struct con . o -> se un puntatore s struttura.

Inoltre dentro contenuto tieni dei char che non sono sufficienti per inserire del testo, usa char* o un oggetto string:



struct Contenuto {
string testo;
};

...
Contenuto c;
c.testo = linea;
...



Inoltre in C++ non serve pi specificare struct



struct Contenuto c;


600-esimo post :yuppi:

:ciauz:

netarrow
09-02-2005, 13:07
Ecco qua, un esempio completo che fa quello che ti serve:



#include <string>
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;

struct Contenuto {
string titolo, corpo, data;
};


int main() {
vector<string> parola;
ifstream in("postit.txt");//Apro la lettura del file
string linea;
while (getline(in, linea,'\n'))
parola.push_back(linea);

Contenuto c;

c.titolo = parola[0];
c.data = parola[1];
for(register int y = 2; y < parola.size(); y++)
c.corpo += parola[y];

cout << "Titolo: " << c.titolo << endl;
cout << "Data: " << c.data << endl << endl;
cout << c.corpo << endl;

return 0;
}



:ciauz:

Shea
09-02-2005, 16:52
Grazie mille per i chiarimenti. Ho proavato il tuo script e ho provato anche a modificarlo con scarsi risultati.
Quello che dovrei fare ora, leggere dentro parola[i] e il contenuto metterlo dentro a quelli che ora sono c.titolo, c.corpo e c.data.

Il file di testo a cui leggo composto cos:

titolo|TAB|corpo|TAB|data

dove "|TAB|" il tabulatore. Per leggere parola[i] come posso fare?

netarrow
09-02-2005, 17:37
credo che basti modificare al posto di \n \t



while (getline(in, linea,[B]'\t'[\B]))
parola.push_back(linea);


quindi parola[0] titolo
parola[1] data
e parola[2] il testo

Tenendo conto che getline prende anche \n, potresti leggere tutto il file e metterlo in una stringa, quindi farti una substringa facendo un find di \t, invece che leggere usando un delimitatore.

L'alternativa era il in.get che nn si ferma anche a \n, ma invece di usare un oggetto string bisotna usare una char* e quindi ci si complica per la gestione della memoria.

:ciauz:

netarrow
09-02-2005, 17:40
Originariamente inviato da Shea
...
dove "|TAB|" il tabulatore. Per leggere parola[i] come posso fare?

ma sei obbligato ad utilizzare tab come delimitatore? E' pi diretto fare

Titolo\n
Corpo
Data

Quindi mettere tutte le line in un vector, salvare la prima e l'ultima riga in titolo e data, e da inizio+1 a fine-1 inesrire il corpo.

:ciauz:

Loading