2010-12-13 8 views
28

Czy istnieje bezpośredni sposób obliczania wielkości ciągu wewnętrznego w strumieniu łańcuchowym?Wielkość strumienia stringów

Tutaj, str() zwraca kopię, a następnie pobiera rozmiar ciągu znaków.

std::stringstream oss("String"); 
oss.str().size(); 

Odpowiedz

15
std::stringstream oss("String"); 
oss.seekp(0, ios::end); 
stringstream::pos_type offset = oss.tellp(); 

To dla wskaźnika zapisu, ale wynik jest taki sam dla wskaźnika przeczytać na Visual C++ v10.

41

oczywiście jest:

std::stringstream oss("Foo"); 
oss.seekg(0, ios::end); 
int size = oss.tellg(); 

Teraz rozmiar będzie zawierać rozmiar (w bajtach) łańcucha.

EDIT:

Jest to również dobry pomysł, aby umieścić po powyższym fragmencie, gdyż stawia wewnętrzny wskaźnik do początku łańcucha.

oss.seekg(0, ios::beg); 
+0

Interesujące. Zastanawiam się, czy to zawsze będzie pokazywać ten sam wynik, co ekwiwalenty wskaźnika zapisu. –

+1

Jeśli używasz wskaźnika zapisu, czy nadal musisz szukać do końca? Czy nie zawsze będzie na końcu? – Ferruccio

+1

Wygląda na to, że Gcc 4.4 nie podoba się, ustawia awarię strumienia. –