Diviser une chaîne en un vecteur de chaînes en C
Diviser une chaîne en ses éléments constitutifs peut être une tâche courante en programmation. Lorsque vous travaillez avec des chaînes en C , vous devrez peut-être diviser une chaîne en un vecteur de chaînes. Il existe plusieurs façons d'accomplir cette tâche, mais l'approche la plus efficace et la plus pratique dépend des exigences spécifiques de votre application.
Boost Algorithm Library
Si vous utilisez la bibliothèque Boost, vous pouvez tirer parti de sa puissante bibliothèque d'algorithmes de chaînes. Boost fournit une implémentation robuste de la fonction « split », qui vous permet de diviser facilement une chaîne en un vecteur de chaînes. L'extrait de code suivant montre comment utiliser Boost pour diviser une chaîne :
#include <boost/algorithm/string/classification.hpp> // Include boost::for is_any_of #include <boost/algorithm/string/split.hpp> // Include for boost::split // ... std::vector<std::string> words; std::string s; boost::split(words, s, boost::is_any_of(", "), boost::token_compress_on);
Dans cet exemple, le vecteur « mots » contiendra chacune des sous-chaînes divisées par les délimiteurs spécifiés (virgule et espace). De plus, 'token_compress_on' garantit que les délimiteurs consécutifs sont traités comme un seul délimiteur.
Fonctions de bibliothèque standard
Si Boost n'est pas une option, vous pouvez utiliser C fonctions de bibliothèque standard pour la manipulation de chaînes. Une approche consiste à utiliser la fonction « find » pour localiser chaque délimiteur, puis à utiliser « substr » pour extraire la sous-chaîne :
std::vector<std::string> words; std::string s; for (size_t pos = 0; ; pos += len) { size_t len = s.find(",", pos); if (len == std::string::npos) { len = s.length() - pos; } words.push_back(s.substr(pos, len)); if (len == 0) break; }
Cet extrait de code divisera la chaîne « s » par des virgules et ajoutera chaque sous-chaîne. au vecteur 'mots'.
Expressions régulières
Un autre L'option consiste à utiliser des expressions régulières pour diviser la chaîne. Les expressions régulières peuvent fournir un moyen puissant et flexible d'effectuer des opérations de chaîne complexes :
std::vector<std::string> words; std::string s; std::regex re(","); std::sregex_token_iterator it(s.begin(), s.end(), re, -1); std::sregex_token_iterator end; while (it != end) { words.push_back(*it); ++it; }
Cet extrait de code utilise 'std::regex' et 'std::sregex_token_iterator' pour diviser la chaîne 's' par virgules, en ajoutant à nouveau chaque sous-chaîne aux « mots » vecteur.
Conclusion
La meilleure approche pour diviser une chaîne en un vecteur de chaînes dépend de vos besoins spécifiques. Si vous avez besoin d'une solution puissante et polyvalente, la bibliothèque d'algorithmes de chaînes Boost est fortement recommandée. Pour les implémentations C standard, envisagez d'utiliser les fonctions ou expressions régulières « find » et « substr ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!