Vì tôi không thể tìm thấy bất cứ điều gì về điều này trong số documentation, tôi nghĩ rằng tôi yêu cầu nó ở đây. Tôi có chương trình sau đây (C++ 11):boost :: split lá trống thẻ ở đầu và cuối chuỗi - là hành vi mong muốn này?
#include <iostream>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
int main() {
string tmp = " #tag #tag1#tag2 #tag3 ####tag4 ";
list<iterator_range<string::iterator> > matches;
split(matches, tmp, is_any_of("\t #"), token_compress_on);
for(auto match: matches) {
cout << "'" << match << "'\n";
}
}
Đầu ra là:
''
'tag'
'tag1'
'tag2'
'tag3'
'tag4'
''
Tôi đã có thể nghĩ rằng tùy chọn token_compress_on
loại bỏ tất cả các thẻ trống. Giải pháp là, ví dụ: sử dụng boost::trim_if
. Tuy nhiên tôi đã tự hỏi nếu đây là hành vi mong muốn của tăng :: tách, và tại sao điều này đang xảy ra?
(g ++ 4.6.3, tăng 1,48)
Có lẽ tôi không nắm được vấn đề, nhưng làm thế nào tôi có thể tái tạo "#tag # TAG1 # TAG2 # TAG3 #### tag4" từ thẻ " "," thẻ "," tag1 "," tag2 "," tag3 "," tag4 "," "? – fdlm
@fdlm Điều đó sẽ cụ thể đối với định dạng chuỗi của bạn. Các hành vi của 'tăng :: chia' là khá chung chung, nhưng đối với một số người dùng, họ có thể quan tâm đến việc bảo tồn dấu vết/nhân vật hàng đầu mà nếu không sẽ được loại bỏ bằng cách chia tách trên chúng. Về cơ bản nếu bạn cần những ký tự đó biến mất, bạn cần phải rõ ràng và soạn các hàm với nhau để làm những gì bạn mong đợi. – birryree
Ok, tôi hiểu rồi. Cám ơn bạn vì đã chỉ ra điều này. – fdlm