Duplicata possible:
Fractionnement d'une chaîne en C++
En PHP, la fonction explode()
prendra une chaîne et la découpera en un tableau séparant chaque élément par un délimiteur spécifié.
Existe-t-il une fonction équivalente en C++?
Voici un exemple d'implémentation simple:
#include <string>
#include <vector>
#include <sstream>
#include <utility>
std::vector<std::string> explode(std::string const & s, char delim)
{
std::vector<std::string> result;
std::istringstream iss(s);
for (std::string token; std::getline(iss, token, delim); )
{
result.Push_back(std::move(token));
}
return result;
}
Usage:
auto v = explode("hello world foo bar", ' ');
Remarque: L'idée de Jerry d'écrire dans un itérateur de sortie est plus idiomatique pour C++. En fait, vous pouvez fournir les deux; un modèle d'itérateur de sortie et un wrapper qui produit un vecteur, pour une flexibilité maximale.
Remarque 2: Si vous souhaitez ignorer les jetons vides, ajoutez if (!token.empty())
.
La bibliothèque standard n'inclut pas d'équivalent direct, mais elle est assez facile à écrire. En tant que C++, vous ne voulez normalement pas écrire spécifiquement dans un tableau - plutôt, vous voudriez généralement écrire la sortie dans un itérateur, afin qu'elle puisse aller dans un tableau, un vecteur, un flux, etc. Cela donnerait quelque chose sur cet ordre général:
template <class OutIt>
void explode(std::string const &input, char sep, OutIt output) {
std::istringstream buffer(input);
std::string temp;
while (std::getline(buffer, temp, sep))
*output++ = temp;
}