2012-04-22 28 views
7

In C++, esiste una funzione nella libreria fstream (o qualsiasi libreria) che mi consente di leggere una riga su un delimitatore di \ n senza estrarre?Funzione fdt C++ che legge una riga senza estrarre?

So che la funzione peek() consente al programma di "sbirciare" il prossimo carattere di lettura senza estrarre, ma ho bisogno di una funzione simile a peek() che lo fa, ma per un'intera riga.

+0

Qual è il tuo caso d'uso per questo? Sembra un po 'un problema XY. –

+0

è quello di leggere un file di testo e da esso voglio usare una funzione simile a peek() per determinare se il prossimo valore che sta leggendo è una stringa sentenziosa o meno. il metodo di seguito ha funzionato perfettamente per il mio problema. – SexyBeastFarEast

risposta

11

È possibile eseguire questa operazione con una combinazione di getline, tellg e seekg.

#include <fstream> 
#include <iostream> 
#include <ios> 


int main() { 
    std::fstream fs(__FILE__); 
    std::string line; 

    // Get current position 
    int len = fs.tellg(); 

    // Read line 
    getline(fs, line); 

    // Print first line in file 
    std::cout << "First line: " << line << std::endl; 

    // Return to position before "Read line". 
    fs.seekg(len ,std::ios_base::beg); 

    // Print whole file 
    while (getline(fs ,line)) std::cout << line << std::endl; 
} 
+0

Grazie Kleist questo metodo funziona perfettamente! Quindi presumo che non ci sia una funzione di tipo peek() che legge una riga? – SexyBeastFarEast

+0

È vero, non esiste una tale funzione di sbirciatina. – Kleist