Cómo dividir cadenas en C++

En este artículo se explicará cómo dividir o separar cadenas de texto en el lenguaje de programación C++. En algunos casos, es necesario separar una cadena en varias partes para procesarla mejor o para analizarla. Para hacer esto, se puede utilizar la biblioteca estándar de C++ que proporciona funciones para manipular cadenas.
Métodos para dividir cadenas en C++
1. Usando la función find()
La función find() devuelve la posición de la primera aparición de una subcadena en otra cadena. Podemos usar esta función para encontrar el separador que divide la cadena y luego usar substr() para extraer las subcadenas resultantes.
#include
#include
using namespace std;
int main()
{
// Cadena a ser dividida
string cadena = "Hola,amigos,cómo,están";
// Tamaño de la cadena
int n = cadena.length();
// Separador
char separador = ',';
// Buscar el primer separador
int pos = cadena.find(separador);
// Ciclo para encontrar todos los separadores
while(pos != string::npos)
{
// Imprimir la subcadena antes del separador
cout << cadena.substr(0, pos) << endl;
// Borrar la subcadena encontrada
cadena.erase(0, pos + 1);
// Buscar el siguiente separador
pos = cadena.find(separador);
}
// Imprimir la última subcadena
cout << cadena << endl;
return 0;
}
2. Usando la función strtok()
La función strtok() divide una cadena en una serie de subcadenas más pequeñas según un conjunto de delimitadores. Esta función se debe llamar varias veces para obtener cada subcadena.
#include
#include
using namespace std;
int main()
{
// Cadena a ser dividida
char cadena[] = "Hola,amigos,cómo,están";
// Delimitaciones
const char separador[2] = ",";
// Primera llamada a strtok()
char *token = strtok(cadena, separador);
// Ciclo para llamar a strtok() varias veces
while(token != NULL)
{
// Imprimir la subcadena
cout << token << endl;
// Llamada a strtok() de nuevo
token = strtok(NULL, separador);
}
return 0;
}
3. Usando la clase stringstream()
La clase stringstream permite leer y escribir en objetos de tipo string como si fueran streams. Podemos usar esta clase para dividir una cadena y convertirla en otras variables.
#include
#include
#include
using namespace std;
int main()
{
// Cadena a ser dividida
string cadena = "Hola,amigos,cómo,están";
// Objeto stringstream
stringstream ss(cadena);
// Ciclo para extraer las subcadenas
string subcadena;
while(getline(ss, subcadena, ','))
{
// Imprimir la subcadena
cout << subcadena << endl;
}
return 0;
}
Ejemplos de uso
1. Dividiendo una URL
Podemos usar la función find() para dividir una URL en sus componentes principales.
#include
#include
using namespace std;
int main()
{
// URL a ser dividida
string url = "https://www.google.com/search?q=c%2B%2B&oq=c%2B%2B";
// Protocolo
int protocolo_pos = url.find("://");
string protocolo = url.substr(0, protocolo_pos);
cout << "Protocolo: " << protocolo << endl;
// Nombre del servidor
int servidor_pos = url.find("/", protocolo_pos + 3);
string servidor = url.substr(protocolo_pos + 3, servidor_pos - protocolo_pos - 3);
cout << "Servidor: " << servidor << endl;
// Ruta
string ruta = url.substr(servidor_pos);
cout << "Ruta: " << ruta << endl;
return 0;
}
2. Dividiendo una fecha
Podemos usar la clase stringstream para dividir una fecha y convertirla en variables para su posterior procesamiento.
#include
#include
#include
using namespace std;
int main()
{
// Fecha a ser dividida
string fecha = "10/08/2022";
// Objeto stringstream
stringstream ss(fecha);
// Variables de la fecha
int dia, mes, anio;
// Extraer los componentes de la fecha
char separador;
ss >> dia >> separador >> mes >> separador >> anio;
// Imprimir los componentes de la fecha
cout << "Dia: " << dia << endl;
cout << "Mes: " << mes << endl;
cout << "Año: " << anio << endl;
return 0;
}
Conclusión
En este artículo se han presentado tres métodos diferentes para dividir cadenas en C++. Con la biblioteca estándar de C++, podemos trabajar con cadenas de manera rápida y eficiente utilizando cualquiera de estas técnicas. Ahora tienes las herramientas necesarias para procesar cadenas de texto con mayor facilidad y para llevar tus habilidades de programación a nuevas alturas.
Preguntas frecuentes
1. ¿Puedo dividir una cadena utilizando una cadena como delimitador?
Sí, en lugar de un carácter único, se puede usar una cadena completa como delimitador.
2. ¿Cómo puedo combinar los métodos para dividir cadenas en C++?
Puedes usar la función find() o la clase stringstream para encontrar el primer separador y luego la función strtok() para dividir las subcadenas resultantes.
3. ¿Cómo puedo evitar errores al dividir una cadena en C++?
Es importante comprobar si la subcadena resultante está vacía antes de procesarla para evitar errores en tiempo de ejecución.
4. ¿Puedo dividir una cadena utilizando varios delimitadores diferentes?
Sí, puedes utilizar cualquiera de los métodos presentados en este artículo para dividir una cadena utilizando varios delimitadores diferentes.
[nekopost slugs="error-de-cpp-lvalue-requerido-asignacion-de-operando-a-la-izquierda,convertir-el-programa-python-a-cpp,integer-division-cpp,error-esperado-id-no-calificado,funcion-de-retrancion-vector-cpp,crear-cadenas-vectoriales-cpp,use-cpp-fstream,para-caducar-cpp,tamano-del-vector-de-conteo-c"]

Deja una respuesta