Itérer sur des chaînes : l'élégance rencontre l'efficacité
Itérer sur les mots individuels d'une chaîne, en particulier lorsqu'ils sont séparés par des espaces, est une programmation courante tâche. Bien que diverses approches existent, trouver une solution élégante et efficace peut s'avérer difficile.
Méthode actuelle utilisant StringStream
L'exemple fourni utilise un stringstream, mais l'OP recherche une approche plus solution élégante. Cette méthode est certes robuste, mais elle implique une certaine manipulation des personnages et n'est pas aussi concise que souhaité.
Solution élégante : diviser les chaînes
Pour obtenir à la fois élégance et efficacité, nous pouvons utiliser la fonction split() de C. Cette fonction prend une chaîne et un délimiteur en entrée et renvoie un vecteur contenant les mots divisés.
#include <vector> #include <string> template <typename Out> void split(const std::string &s, char delim, Out result) { std::istringstream iss(s); std::string item; while (std::getline(iss, item, delim)) { *result++ = item; } } std::vector<std::string> split(const std::string &s, char delim) { std::vector<std::string> elems; split(s, delim, std::back_inserter(elems)); return elems; }
Cette solution nécessite un minimum de code et est facile à comprendre. Il lit simplement la chaîne dans un flux de chaînes et utilise la fonction getline() pour extraire des mots individuels en utilisant le délimiteur spécifié. Les chaînes divisées peuvent ensuite être stockées dans un vecteur pour un traitement ultérieur.
Gardez cependant à l'esprit que cette solution n'ignore pas les jetons vides. Si vous devez supprimer les chaînes vides, vous pouvez post-traiter davantage le vecteur.
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!