2012-10-15 24 views

Trả lời

3

Rất tiếc, không có cách nào để có nhiều "kết thúc dòng". Những gì bạn có thể làm là đọc dòng với ví dụ: std::getline và đặt nó vào một số std::istringstream và sử dụng std::getline (với bộ tách ';') trong vòng lặp trên istringstream.

Mặc dù bạn có thể kiểm tra thư viện Boost iostreams để xem nó có chức năng cho nó hay không.

+0

Ok, cảm ơn, điều đó khá tuyệt! Tôi đã viết một vòng lặp rằng std :: stringstream.put(): ed mọi char cho đến khi nó tìm thấy '\ n' hoặc ';', và sau đó được sử dụng stringstream.str() để lấy chuỗi. – Erika

3

std::getline. Đối với các trường hợp phức tạp hơn, người dùng có thể thử tách istream_iterator hoặc istreambuf_iterator bằng boost split hoặc regex_iterator (here is an example sử dụng trình lặp dòng).

+2

'std :: getline' là tốt vì nó có một tình trạng quá tải cho 'std: : string' tạo chuỗi I/O nhiều, dễ dàng hơn nhiều (ít nhất theo ý kiến ​​của tôi). – dreamlax

+2

'std :: getline' không hỗ trợ trong trường hợp này khi OP muốn kết thúc nhiều dòng/dấu tách. –

0

Đây là một thực hiện làm việc:

enum class cascade { yes, no }; 
std::istream& getline(std::istream& stream, std::string& line, const std::string& delim, cascade c = cascade::yes){ 
    line.clear(); 
    std::string::value_type ch; 
    bool stream_altered = false; 
    while(stream.get(ch) && (stream_altered = true)){ 
     if(delim.find(ch) == std::string::npos) 
      line += ch; 
     else if(c == cascade::yes && line.empty()) 
      continue; 
     else break; 
    } 
    if(stream.eof() && stream_altered) stream.clear(std::ios_base::eofbit); 
    return stream; 
} 

Tùy chọn cascade::yes sụp đổ delimiters liên tiếp được tìm thấy. Với cascade::no, nó sẽ trả về một chuỗi rỗng cho mỗi một dấu phân cách liên tiếp thứ hai được tìm thấy.

Cách sử dụng:

const std::string punctuation = ",.';:?"; 
std::string words; 
while(getline(istream_object, words, punctuation)) 
    std::cout << word << std::endl; 

Xem sử dụng của nó Live on Coliru

Một phiên bản chung chung hơn sẽ this

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