Je cherchais boost :: tokenizer, et j'ai trouvé que la documentation est très fine. Est-il possible de faire une chaîne comme "dauphin - singe - babouin" et de faire de chaque mot un jeton, ainsi que chaque double tiret un jeton? À partir des exemples, je n'ai vu que les délimiteurs à caractère unique autorisés. La bibliothèque n'est-elle pas assez avancée pour les délimiteurs plus compliqués?Utiliser boost :: tokenizer avec des délimiteurs de chaînes
Répondre
Il semble que vous aurez besoin d'écrire le vôtre TokenizerFunction pour faire ce que vous voulez.
Je vois. J'espérais qu'il y aurait quelque chose de pré-fabriqué, mais j'imagine que j'espérais trop. – Martin
Une option consiste à essayer boost :: regex. Pas sûr de la performance par rapport à un tokenizer 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;
}
C'est gentil. Si cela fonctionne, il obtient mon vote. :) –
L'utilisation de iter_split vous permet d'utiliser plusieurs jetons de caractères. Le code ci-dessous produirait ce qui suit:
dauphin
mon-clé
babouin
#include <iostream>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/iter_find.hpp>
// code starts here
std::string s = "dolphin--mon-key--baboon";
std::list<std::string> stringList;
boost::iter_split(stringList, s, boost::first_finder("--"));
BOOST_FOREACH(std::string token, stringList)
{
std::cout << token << '\n'; ;
}
Cela a l'inconvénient de créer une copie de la chaîne entière. Si la chaîne tokenized est grande, c'est un problème. Le tokenizer boost ne fait pas ça. –
Je sais que le thème est assez vieux, mais il est indiqué dans les liens dans Google quand je la recherche « boost tokenizer par chaîne »
donc je vais ajouter ma variante de TokenizerFunction, juste au cas où:
class FindStrTFunc
{
public:
FindStrTFunc() : m_str(g_dataSeparator)
{
}
bool operator()(std::string::const_iterator& next,
const std::string::const_iterator& end, std::string& tok) const
{
if (next == end)
{
return false;
}
const std::string::const_iterator foundToken =
std::search(next, end, m_str.begin(), m_str.end());
tok.assign(next, foundToken);
next = (foundToken == end) ? end : foundToken + m_str.size();
return true;
}
void reset()
{
}
private:
std::string m_str;
};
après que nous pouvons créer
boost::tokenizer<FindStrTFunc> tok("some input...some other input");
et utiliser, comme d'habitude un coup de pouce tokenizer
la mise en œuvre n'est pas idéale (pourrait avoir des bugs), c'est juste un exemple – Alek86
- 1. Utilisation de escaped_list_separator avec split boost
- 2. Comment diviser une chaîne avec des caractères blancs comme délimiteurs?
- 3. Email Templating avec délimiteurs
- 4. Utiliser Boost sur Ubuntu
- 5. Problèmes avec boost :: ptr_vector et boost :: tout
- 6. Utilisation de la découpe avec des délimiteurs non imprimables
- 7. Ignorer les délimiteurs échappés (virgules) avec awk?
- 8. Solr: Remplir des champs séparés à partir d'un Tokenizer
- 9. Diviser une chaîne avec des accolades comme délimiteurs?
- 10. définir des délimiteurs dans vba pour l'accès
- 11. Division de chaîne sensible au contexte, préservation des délimiteurs
- 12. Boost Regex - Où sont stockées les chaînes correspondantes?
- 13. Ajouter des délimiteurs différents dans javascript toString() ..?
- 14. Comment utiliser boost :: mpl pour composer des politiques?
- 15. en utilisant des itérateurs de chaînes sur char * dans boost regex
- 16. Utilisation d'amis avec des classes de base pour Boost Paramètre
- 17. Crash avec boost :: thread
- 18. Utiliser des chaînes pour accéder à des méthodes personnalisées dynamiquement
- 19. Comment utiliser des ensembles de chaînes en Pascal?
- 20. jQuery Remplacer des chaînes avec des URL
- 21. static_cast avec boost :: shared_ptr?
- 22. PHP: Utiliser quote() sur les chaînes dans MDB2 avec MYSQL
- 23. Analyse de chaînes de date-heure avec des microsecondes
- 24. Utilisation de Boost avec Cygwin sous Windows
- 25. Requêtes SolrNet avec fonctions boost
- 26. Les tests Intellisense boost :: boost :: boost :: boost :: boost :: boost :: classname ....... pourquoi?
- 27. SHA-1 Hashs mélangés avec des chaînes
- 28. Rechercher des permutations de chaînes dans le jeu de chaînes
- 29. Erreur de segmente lors de l'utilisation de + = avec des chaînes
- 30. Y a-t-il des raisons de ne pas utiliser Boost :: shared_ptrs?
Juste curieux de savoir pourquoi cela est marqué wiki communautaire? –
Je pensais que cela permettrait aux autres de clarifier ma question au cas où il serait un peu diffus. Peut-être devrais-je lire ce que c'est, jusqu'à la prochaine fois. – Martin