2013-12-10 14 views
7

Tôi có một tập tin văn bản trong định dạng sau:Tôi muốn cin để đọc cho đến khi ' n' nhưng tôi không thể sử dụng getline

info 
data1 data2 
info 
data1 data2 data3 data4... 

Vấn đề là: số lượng (và thời gian) của dữ liệu có thể rất lớn và gây ra các vấn đề thời gian chạy khi sử dụng getline(). Vì vậy, tôi không thể đọc toàn bộ dòng vào một số std::string. Tôi đã thử các cách sau:

for(int i=0; i<SOME_CONSTANT ; i++){ 
    string info, data; 

    cin >> info; 

    while(cin.peek() != '\n' && cin >> data){ 
     // do stuff with data 
    } 
} 

Tuy nhiên cin.peek() không thực hiện thủ thuật. Các thông tin được đọc vào dữ liệu trong vòng lặp trong khi và chương trình messes mọi thứ lên. Làm thế nào tôi có thể sửa lỗi này?

+0

Bạn đã thử 'std :: string :: max_size' làm tham số thứ hai cho' std :: istream :: getline'? –

+1

Kích thước của dữ liệu là vấn đề như thế nào? Bao lâu là các dòng? –

+0

tối đa 150.000 ký tự – Varaquilex

Trả lời

7

Bạn có thể thử đọc ký tự theo ký tự.

char ch; 
data = ""; 
cin >> std::noskipws; 
while(cin >> ch && ch != '\n') { 
    if (ch == " ") { 
    // do stuff with data 
    data = ""; 
    continue; 
    } 
    data += ch; 
} 
cin >> std::skipws; 
Các vấn đề liên quan