2011-09-15 27 views
8

Tôi muốn biết nếu có một phương pháp sử dụng boost :: split để tách một chuỗi bằng cách sử dụng toàn bộ chuỗi như một dấu phân tách. Ví dụ:Boost :: Split sử dụng toàn bộ chuỗi như dấu phân cách

str = "xxaxxxxabcxxxxbxxxcxxx"

là có một phương pháp để tách chuỗi này sử dụng "abc" như một dấu phân cách? Do đó quay trở lại:

kết quả sẽ là chuỗi "xxaxxxx" và "xxxxbxxxcxxx"

tôi biết boost :: chia cách sử dụng "is_any_of" vị ngữ, tuy nhiên cách gọi "is_any_of (" abc ")" sẽ cho kết quả trong việc tách chuỗi tại ký tự đơn 'a', 'b' và 'c', đó không phải là thứ tôi muốn.

bất kỳ trợ giúp nào sẽ được đánh giá cao.

cảm ơn bạn

+0

Bạn sẽ có thể sử dụng một số kết hợp của 'bằng' và giá trị chuỗi được sử dụng làm dấu phân tách, nhưng các chi tiết cụ thể làm tôi khó hiểu ngay bây giờ. –

+2

có thể trùng lặp của [Chia nhỏ chuỗi con] (http://stackoverflow.com/questions/3739280/split-on-substring) – Cubbi

Trả lời

6

split_regex theo đề nghị của @Mythli là tốt. Nếu bạn không muốn đối phó với regex, bạn có thể sử dụng ifind_all algo, như được hiển thị trong số example này. Bạn nhận được iterator_range (bắt đầu/kết thúc) của tất cả các lần xuất hiện của dấu phân cách. Mã thông báo của bạn nằm giữa chúng (và ở đầu và cuối chuỗi).

+0

Cảm ơn, giải pháp này phù hợp với nhu cầu của tôi một cách hoàn hảo. – andre

6

Có có một cách (đây là một cách mà tôi biết, có thể có một cách tốt hơn) Sử dụng boost::algorithm::split_regex để chia chuỗi ký tự nơi delimiters là biểu thức thông thường.

Ví dụ:

vector<string> result; 
boost::algorithm::split_regex(result, str, regex("^((?!abc)*abc(?!abc)*)*$")) ; 
copy(result.begin(), result.end(), ostream_iterator<string>(cout, "\n")) ; 
+1

Cảm ơn, giải pháp này hoạt động, tuy nhiên nó đòi hỏi phải tăng cường xây dựng. Hiện tại tôi chỉ đang sử dụng các tệp tiêu đề. – andre

+1

#include

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