Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157

    [C++] Aiutino per le struct

    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:
    codice:
     
    #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

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    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:

    codice:
    struct Contenuto {
    string testo;
    };
    
    ...
    Contenuto c;
    c.testo = linea;
    ...
    Inoltre in C++ non serve più specificare struct

    codice:
    struct Contenuto c;
    600-esimo post

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Ecco qua, un esempio completo che fa quello che ti serve:

    codice:
    #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;
    	}
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  4. #4
    Utente di HTML.it L'avatar di Shea
    Registrato dal
    Jul 2000
    Messaggi
    157
    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ì:
    codice:
    titolo|TAB|corpo|TAB|data
    dove "|TAB|" è il tabulatore. Per leggere parola[i] come posso fare?

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    credo che basti modificare al posto di \n \t

    codice:
            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.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    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.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.