2011-09-15 16 views
8

Boost :: split kullanarak tüm dizeleri bir sınırlayıcı olarak kullanarak bir dizeyi ayırmak için bir yöntem olup olmadığını bilmek istiyorum. Örneğin:Boost :: Sınırlayıcı olarak tüm dizeyi kullanarak bölme

str = "xxaxxxxabcxxxxbxxxcxxx"

bir ayırıcı olarak "abc" kullanarak bu dizeyi bölmek için bir yöntem var mıdır? Bu nedenle dönen:

sonuç Ben yüklemi "is_any_of" Ancak "(abc ")" is_any_of" çağırma neden olacaktır kullanarak boost :: bölünmüş farkındayım dizesi "xxaxxxx" ve "xxxxbxxxcxxx"

olurdu dizgiyi tek karakter 'a', 'b' ve 'c' olarak bölme, ki istediğim bu değil. Herhangi bir yardım için teşekkür ederiz.

Eğer

+0

Bazı "equals" kombinasyonunu ve sınırlayıcı olarak kullanılacak dize değerini kullanabilmeniz gerekir, ancak özellikler şu anda beni çekiyor. –

+2

Mümkün [çoğaltılarak] [http://stackoverflow.com/questions/3739280/split-on-substring] – Cubbi

cevap

6

split_regex gayet iyi. Regex ile uğraşmak istemiyorsanız, bu example'da gösterildiği gibi ifind_all algo'yu kullanabilirsiniz. Sınırlayıcınızın tüm oluşumları için iterator_range (başlangıç ​​/ bitiş) alırsınız. Simgeleriniz aralarındadır (ve dizenin başında ve sonunda).

+0

Teşekkürler, bu çözüm benim ihtiyaçlarına mükemmel uyum sağla. – andre

6

Evet bir yol (bu bildiğim bir yoldur, belki daha iyi bir yolu yoktur) sınırlayıcı normal ifadelerdir karakter dizilerini bölmek boost::algorithm::split_regex kullanın var teşekkür ederim.

Örnek: @Mythli önerdiği gibi

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

Teşekkürler, bu çözüm işe yarıyor, ancak bu destek inşa edilmesini gerektirir. Şu anda sadece başlık dosyalarını kullanıyorum. – andre

+1

#include

İlgili konular