Tôi đang sử dụng boost :: split để phân tích cú pháp một tệp dữ liệu. Tệp dữ liệu chứa các dòng như sau.Làm cách nào để sử dụng phân tách tăng để tách một chuỗi và bỏ qua các giá trị rỗng?
data.txt
1:1~15 ASTKGPSVFPLAPSS SVFPLAPSS -12.6 98.3
Các khoảng trắng giữa các mục là tab. Mã tôi phải chia dòng trên là như sau.
std::string buf;
/*Assign the line from the file to buf*/
std::vector<std::string> dataLine;
boost::split(dataLine, buf , boost::is_any_of("\t "), boost::token_compress_on); //Split data line
cout << dataLine.size() << endl;
Đối với dòng trên mã tôi sẽ nhận được một bản in ra 5, nhưng tôi nhận 6. Tôi đã cố gắng đọc qua các tài liệu hướng dẫn và giải pháp này dường như nó nên làm những gì tôi muốn, rõ ràng tôi thiếu cái gì đó. Cảm ơn!
Chỉnh sửa: Chạy vòng lặp như sau trên dataLine bạn nhận được thông tin sau.
cout << "****" << endl;
for(int i = 0 ; i < dataLine.size() ; i ++) cout << dataLine[i] << endl;
cout << "****" << endl;
****
1:1~15
ASTKGPSVFPLAPSS
SVFPLAPSS
-12.6
98.3
****
giá trị được lưu trữ trong dataLine là gì? –
[Tôi nhận được 5] (http://liveworkspace.org/code/1KMXAm$1), 'buf' của bạn chứa nội dung khác. –
Có lẽ nó đã không sao chép chính xác vào trang này, bạn đã sao chép không đúng vào mã kiểm tra. Hãy để tôi xem về việc đảm bảo nó sao chép chính xác. – PhiloEpisteme