Maison >développement back-end >C++ >Comment puis-je parcourir de manière efficace et élégante les mots d'une chaîne ?

Comment puis-je parcourir de manière efficace et élégante les mots d'une chaîne ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-24 22:31:161002parcourir

How Can I Efficiently and Elegantly Iterate Over Words in a String?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn