Domanda creare un vettore a partire da un file .txt?

Stato
Discussione chiusa ad ulteriori risposte.

gerasia

Utente Electrum
30 Gennaio 2018
288
72
52
176
salve ragazzi, premetto che non mi interessa avere la pappa pronta ed il codice bello e fatto, solo che non riesco a capire come fare a creare un array partendo da un file .txt. espongo l'esercizio:


Nemo ha deciso di spostare tutti i fumetti di Dylan Dog della sua collezione in una grande libreria che ha appena acquistato. Attualmente tutti i fumetti si trovano in due distinte librerie e sono, come sappiamo, in completo disordine. Il numero di questi fumetti è davvero enorme, ci vorrebbero giorni interi per ordinarli. Lidia però ha deciso di dargli una mano e ha passato l’intera mattina ad aiutare Nemo ordinando le due grandi librerie contenenti i fumetti. Adesso Nemo si trova davanti queste due grandi librerie in cui i fumetti sono ordinati, in ordine crescente, ma ha il compito di spostarli tutti nella libreria grande cercando di metterli in ordine di numero.

Specifiche
Aiuta Nemo a riordinare tutti i sui fumetti, spostandoli dalle due librerie piccole nella libreria grande. Si scriva quindi un programma in c++ che, preso in input l’insieme dei numeri dei fumetti presenti nelle due librerie, generi la sequenza ordinata di tali numeri da posizionare nella libreria grande.
Il file di input contiene 10 task, uno per ogni riga.
Ogni riga del file di input contiene N+M+2 valori. Il primo valore rappresenta il numero N di fumetti presenti nella prima libreria piccola. Il secondo valore rappresenta il numero M di fumetti presenti nella seconda libreria piccola. Segue la sequenza ordinata degli N numeri dei fumetti della prima libreria. Infine segue la sequenza ordinata degli M numeri dei fumetti della seconda libreria.
Il file di output conterrà 10 righe di testo, una per ogni task contenuto nel file di input. In particolare, ogni riga del file di output dovrà contenere la sequenza ordinata degli N+M numeri dei fumetti dell’intera collezione.

Nota
E’ possibile che alcuni fumetti siano doppioni, cioè possano apparire sia nella prima che nella seconda libreria.
N ed M sono dei numeri interi compresi tra 1 e 1000.
I numeri dei fumetti sono degli interi compresi tra 1 e 1000.

Esempio
Il seguente esempio presenta un file di input, contenente 3 task, ed il corrispondente file di output.

input.txt:
7 10 2 5 7 11 12 15 16 3 6 8 9 10 13 15 18 22 24
4 5 2 5 7 9 1 3 5 7 10
6 8 1 2 3 4 5 6 1 2 3 4 5 6 7 8

output.txt
2 3 5 6 7 8 9 10 11 12 13 15 15 16 18 22 24
1 2 3 5 5 7 7 9 10
1 1 2 2 3 3 4 4 5 5 6 6 7 8
 
Potresti iniziare usando la libreria fstream, dopodiché crei un ciclo while con condizione (!=file.eof) che sta a significare che il ciclo continua finché non finisce il file.
Poi ovviamente tutto il resto dovrebbe venire da solo.

P.S. eof= end of file. Della libreria fstream guarda le funzioni ifstream e ofstream.
 
il mio problema sta nel fatto che non so come fargli capire che:
il primo numero indica la dimensione del vettore, il secondo il valore da cercare e gli altri i valori da inserire nel mio vettore e quindi inserirli
 
1) Leggi il primo numero e crei un array con quella grandezza del tipo: leggo 4, array[numero_letto]...array[4].
2) Tutti quelli dopo li inserisci nell'array e infine fai un semplice algoritmo di ordinamento sull'array.
3) Non ho capito la questione del valore da cercare, nelle specifiche non è presente una ricerca di un numero specifico o sbaglio?
 
Come ti ho detto nel mio primo messaggio vai a dare un occhiata alle funzioni ifstream e ofstream che servono rispettivamente per leggere e scrivere su un file.
Una volta capito il loro meccanismo ti verrà automatico il tutto, basterà infatti usare ifstream per leggere il numero dal file e poi farci quello che devi.
Spero di esserti stato di aiuto, se dovessi avere problemi con il codice postalo che ti do un mano.
 
se avete studiato la stl puoi usare il vector per contenere i valori una volta letti e con "sort" lo riordini per poi scriverlo nell'output..
10 righe di codice e via
 
Stato
Discussione chiusa ad ulteriori risposte.