2011-07-28 38 views
5

Chúng tôi biết rằng khi chèn \n vào luồng tệp, trình tự cuối dòng thích hợp cho hệ thống sẽ được ghi vào tệp (ví dụ: \r\n dành cho Windows). Có chèn một dòng cuối cùng trong một kết quả std::stringstream trong chuỗi cuối dòng thích hợp của hệ thống được ghi vào chuỗi không? Ví dụ: Hệ thốngChèn dòng cuối vào một chuỗi

#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

Để tiết kiệm thời gian, bạn có thể thực hiện và xem tất cả 'bool' trong chương trình của bạn là 'true' hay không ... rất có thể' isWindows' và 'isMac' sẽ đánh giá là' false'. –

+0

@Aditya: Tôi phải thử trên từng nền tảng. Không phải ai cũng có hộp Windows, Mac và Unix theo ý của họ. :-) –

+0

@Emile: không, bạn chỉ cần dùng thử trong Windows. Bởi vì nếu bạn viết '\ n' và nhận' \ r \ n', nó sẽ chuyển thành dòng mới; và nếu bạn nhận được '\ n' thì không. Nó không đáng chú ý trong Linux hoặc MacOS X, mặc dù. –

Trả lời

11

Các cụ thể kết thúc dòng là chỉ liên quan đến văn bản file. Miễn là luồng chỉ có trong bộ nhớ, nó chỉ là '\n'.

+6

Làm thế nào nó có thể là bất cứ điều gì nhưng ký tự đơn '\ n' trong một chuỗi chuỗi? Giả sử bản dịch được thực hiện trên một luồng chuỗi. Hãy nghĩ về mớ hỗn độn có thể xảy ra với 'sstream1 <<" \ n "; sstream2 << stream1.str(); ...; std :: cout << sstream99.str(); ' –

3

Câu trả lời ngắn: Không.

Long trả lời:

Các dòng tập tin trong chế độ văn bản sẽ chèn ELS cụ thể một nền tảng vào tập tin. Nhưng ứng dụng sẽ không bao giờ thấy điều này khi ELS được chuyển đổi trở lại thành \n khi tệp được đọc. Vì vậy, ngay cả với luồng tệp (ở chế độ văn bản), bạn sẽ không bao giờ thấy ELS.

Quay lại std::stringstream. Nếu mã đã chèn một ELS nền tảng cụ thể (mà nó không) sau đó khi bạn đọc các dòng bạn vẫn sẽ mong đợi để xem \n khi bạn đọc nó trở lại như bạn mong đợi các ELS được chuyển đổi trở lại. Có rất ít điểm khi làm như vậy.

Các vấn đề liên quan