J'ai cherché Boost :: Tokenizer et j'ai constaté que la documentation est très mince. Est-il possible de faire de la goûte une chaîne telle que "Dolphin - Monkey - Baboon" et faire chaque mot un jeton, ainsi que chaque double tiret un jeton? Des exemples que je n'ai vu que des délimiteurs de caractères unique autorisés. La bibliothèque n'est-elle pas suffisamment avancée pour des délimiteurs plus compliqués? P>
4 Réponses :
On dirait que vous devrez écrire votre propre TokenizerFunction faire ce que vous voulez. p>
Je vois. J'espérais qu'il y aurait quelque chose de pré-fabriqué, mais je suppose que j'espérais trop.
Une option est d'essayer Boost :: Regex. Pas sûr de la performance par rapport à un tokéniseur personnalisé.
std::string s = "dolphin--monkey--baboon"; boost::regex re("[a-z|A-Z]+|--"); boost::sregex_token_iterator iter(s.begin(), s.end() , re, 0); boost::sregex_token_iterator end_iter; while(iter != end_iter) { std::cout << *iter << '\n'; ++iter; }
Utilisation iter_split vous permet d'utiliser plusieurs jetons de caractères.
Le code ci-dessous produirait les éléments suivants:
de
Dauphin
MON-KEY
Baboon
Cela a l'inconvénient de créer une copie de la chaîne entière. Si la chaîne étant tokenized est grande, c'est un problème. Le tokéniseur de boost ne fait pas cela.
Je sais que le thème est assez vieux, mais il est montré dans les principaux liens de Google lorsque je recherche "Boost tokenizer par chaîne"
Donc, je vais ajouter ma variante de TokenizerFunction, juste au cas où: P> après que nous puissions créer p> et utiliser, comme un tokéniseur de boost habituel p> p> P>
La mise en œuvre n'est pas idéale (pourrait avoir des bugs), c'est juste un exemple
Juste curieux pourquoi c'est marqué Wiki communautaire?
Je pensais que cela permettrait aux autres de clarifier ma question au cas où il était un peu diffus. Je devrais peut-être lire ce qu'il est, jusqu'à la prochaine fois.