Se si ha il controllo sul formato, sarà (leggermente) più facile da leggere se si eliminano le virgole, e solo in ingresso come
e 225 370 35 75
Con questo formato, il codice di Poita_ per la lettura dei dati funzionerà [modifica: da allora aggiorna il suo codice per leggere e saltare esplicitamente le virgole]. In caso contrario, sarà necessario passare esplicitamente sopra le virgole:
char ingore1, ignore2;
char ch;
int i[4];
file >> ch >> i[0] >> ignore1 >> i[1] >> i[2] >> ignore2 >> i[3];
[Edit: se siete paranoici o davvero bisogno di verificare il tuo ingresso, a questo punto, è possibile verificare che ignore1
e ignore2
contengono le virgole.]
Nella maggior parte dei casi, tuttavia, i dati sono probabilmente correlati, quindi ti consigliamo di leggere un intero linea in un unico struct (o classe):
struct data {
char ch;
int i[4];
std::istream &operator>>(std::istream &is, data &d) {
char ignore1, ignore2;
return is >> ch >> i[0] >> ignore1 >> i[1] >> i[2] >> ignore2 >> i[3];
}
};
Dopo aver fatto questo, è possibile leggere un intero oggetto data
alla volta:
std::ifstream infile("my data file.txt");
data d;
infile >> d;
Oppure, se si dispone di un intero file completo di questi, tutti si può leggere in un vettore:
std::vector<data> d;
std::copy(std::istream_iterator<data>(infile),
std::istream_iterator<data>(),
std::back_inserter(d));
Diteci cosa avete. – bmargulies
Grazie ragazzi. C++ è molto frustrante per me a volte quando ho imparato Java prima. –
Anche se a volte può essere frustrante, aiuta a ottenere alcune librerie potenti che non sono sempre raggruppate direttamente come con Java. Immagina quanto sarebbe frustrante Java se tutto ciò che avevi fosse la lingua principale e nessuna libreria. – joshperry