2011-07-28 11 views
5

Wiemy, że po wstawieniu \n w strumieniu plików, do pliku zostanie zapisana odpowiednia sekwencja końca wiersza systemu (na przykład \r\n dla systemu Windows). Czy wstawienie linii końcowej w std::stringstream powoduje, że w łańcuchu zapisywana jest odpowiednia dla systemu sekwencja końca wiersza? Na przykład: konkretne zakończeń liniiUmieszczanie linii końcowej w strumieniu łańcuchowym

#include <sstream> 

int main() 
{ 
    std::ostringstream oss; 
    oss << std::endl; 
    std::string endlineSequence = oss.str(); 
    bool isWindows = enlineSequence == "\r\n"; 
    bool isOldMac = endlineSequence == "\r"; 
    bool isUnix = endlineSequence == "\n"; 
    // Will this work??? 
} 
+1

Aby zaoszczędzić czas, możesz wykonać i sprawdzić, czy wszystkie 'bool's w twoim programie są 'prawdziwe' czy nie ... najprawdopodobniej' isWindows' i 'isMac' będą oceniać jako" false ". –

+0

@Aditya: Będę musiał spróbować na każdej platformie. Nie wszyscy mają do dyspozycji system Windows, Mac i Unix. :-) –

+0

@Eile: nie, wystarczy wypróbować to w systemie Windows. Ponieważ jeśli napiszesz '\ n' i otrzymasz' \ r \ n', zrobi tłumaczenie na natywną nową linię; a jeśli otrzymasz '\ n', to nie. Nie jest to jednak zauważalne w systemach Linux i MacOS X. –

Odpowiedz

11

systemu są istotne tylko dla tekstu plików. Dopóki strumień jest tylko w pamięci, jest to tylko '\n'.

+6

Jak to może być cokolwiek poza pojedynczym znakiem "\ n" w strumieniu napisów? Załóżmy, że tłumaczenie zostało wykonane w strumieniu ciągów. Pomyśl o bałaganie, który wynikłby z 'sstream1 <<" \ n "; sstream2 << stream1.str(); ...; std :: cout << sstream99.str(); ' –

3

Krótka odpowiedź: nr.

Długa odpowiedź:

Plik strumień w trybie tekstowym wstawić konkretne ELS będzie platformą do pliku. Ale aplikacja nigdy tego nie zobaczy, ponieważ ELS zostanie przekonwertowany z powrotem na \n, gdy plik zostanie odczytany. Więc nawet przy strumieniu pliku (w trybie tekstowym) nigdy nie zobaczysz ELS.

Powrót do std::stringstream. Jeśli kod wstawił specyficzny dla platformy ELS (który nie jest taki sam), to po przeczytaniu strumienia nadal będziesz oczekiwał wyświetlenia \n po przeczytaniu, tak jak oczekiwałbyś konwersji ELS z powrotem. Nie ma to większego sensu.