2013-12-13 14 views
11

Sto provando a scrivere una funzione che rileverà quando sono quasi alla fine di uno stringstream, ma non sembra funzionare.Rileva quando alla fine di un strings

Ecco po 'di codice:

std::string path(1.2.3); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
    if (ss.peek() != '.') { 
     ss >> number; 
     if (ss.tellg() == path.length()) { 
      std::cout << "Last one: " << number; 
     } else { 
      std::cout << number; 
     } 
    } else { ss.get(); } 
} 

Ho provato ad utilizzare ss.tellg() == path.length(), ma questo non funziona. Qualcuno ha un'alternativa?

+0

@ Dave che non funziona neanche. – JNevens

risposta

12

ho capito ..

std::string path(1.2.3); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
    if (ss.peek() != '.') { 
     ss >> number; 
     if (ss.tellg() == -1) { 
      std::cout << "Last one: " << number; 
     } else { 
      std::cout << number; 
     } 
    } else { ss.get(); } 
} 
+0

Umm ... Non hai mai estratto un valore in 'number', quindi perché stai provando a stamparlo? – 0x499602D2

+2

È meglio fare semplicemente 'while (ss)'. EOF è solo uno dei tanti motivi per cui non è più possibile leggere da uno stream. – pyon

+0

@ EduardoLeón ha ragione. Quando 'ss' è falso, significa che non puoi leggere più. Quindi chiama 'ss.eof()' per sapere se 'end of file' è la ragione per cui non puoi leggere più. – xuhdev

1
std::string path("1.2.3"); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
if (ss.peek() != '.') { 
    ss >> number; 
    if (ss.tellg() == -1) { 
     std::cout << "Last one: " << number; 
    } else { 
     std::cout << number; 
    } 
} else { ss.get(); } 
} 
Problemi correlati