separar - ¿Hay un equivalente en C++ de la función de explosión de PHP?
std:: string split (2)
Aquí hay una implementación de ejemplo 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;
}
Uso:
auto v = explode("hello world foo bar", '' '');
Nota: la idea de @ Jerry de escribir en un iterador de salida es más idiomática para C ++. De hecho, puede proporcionar ambos; una plantilla de iterador de salida y una envoltura que produce un vector, para una máxima flexibilidad.
Nota 2: Si desea omitir tokens vacíos, agregue if (!token.empty())
.
Posible duplicado:
Dividiendo una cadena en C ++
En PHP, la función explode()
tomará una cadena y la cortará en una matriz que separa cada elemento por un delimitador específico.
¿Hay una función equivalente en C ++?
La biblioteca estándar no incluye un equivalente directo, pero es bastante fácil de escribir. Sin embargo, al ser C ++, normalmente no querrá escribir específicamente en una matriz, sino que normalmente querrá escribir la salida en un iterador, para que pueda ir a una matriz, vector, flujo, etc. algo en este orden general:
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;
}