elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Comparativa y análisis mejores sistemas de videollamadas


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dividir cadena en subcadena C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dividir cadena en subcadena C++  (Leído 322 veces)
gomezjuan

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Dividir cadena en subcadena C++
« en: 17 Mayo 2020, 15:17 »

Si tengo un string =ajndfvaorncak89s'', ¿como puedo dividir la cadena en subcadenas cada vez que llege a una a?
Es decir, dividir esa cadena en:
ajndfv
aornc
ak89s


En línea

EdePC
Colaborador
***
Desconectado Desconectado

Mensajes: 1.187


Ver Perfil
Re: Dividir cadena en subcadena C++
« Respuesta #1 en: 17 Mayo 2020, 18:39 »

Se me ocurre de la manera más cruda iterar cada caracter hasta encontrar un 'a', en lugar de imprimirlo podrías guardarlo en un Array o Vector...

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.  string txt = "ajndfvaorncak89s";
  8.  for (int i = 1; i <= txt.size(); i++) {
  9.    cout << txt[i-1];
  10.    if (txt[i] == 'a') {
  11.      cout << endl;
  12.    }
  13.  }
  14.  return 0;
  15. }

Citar
C:\Users\EdSon\Desktop>g++ split.cpp -o split.exe && split.exe
ajndfv
aornc
ak89s
C:\Users\EdSon\Desktop>


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 736



Ver Perfil
Re: Dividir cadena en subcadena C++
« Respuesta #2 en: 17 Mayo 2020, 19:27 »

Además de la opción que ya te ha dado EdePC para la que no necesitas de funciones preexistentes; hay otras opciones como utilizar la función strtok(): https://en.cppreference.com/w/cpp/string/byte/strtok que permite separar una cadena de caracteres en base a una serie de limitadores que puedes establecer tú (en este caso: "a").

Fíjate en su uso ya que es un poco peculiar.

Suerte.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
RayR

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Dividir cadena en subcadena C++
« Respuesta #3 en: 17 Mayo 2020, 20:53 »

Me parece un poco ambiguo lo de cada vez que llegue a una 'a'. O sea, si la cadena no empieza con 'a', como en "xyzajndfvaorncak89s", ¿la primera subcadena debería ser xyz, o ajndfv? Como lo planteas parecería que es la primera, pero a mí me parece más lógica la segunda, así que me enfoco en ella.

Una opción es la función strtok, que ya te mencionaron, pero ten en cuenta que es para cadenas de C (arreglos o punteros char). Aunque hay forma de acceder al buffer interno de string, por varias razones podría no funcionar con strtork, además de que esta función es "destructiva"; es decir, modifica la cadena origen, por lo que al final tu string quedaría alterado. En todo caso, si quieres usar strtok, sería mejor crear una copia de tu string en un arreglo char, y trabajar sobre ella.

Una alternativa es usar las funciones miembro de string find() y substr(). Un ejemplo para encontrar la primera subcadena:

Código
  1. std::string::size_type inicio, fin = 0;
  2.  
  3. inicio = cadena.find('a', fin);
  4.  
  5. // Si se encontro una letra 'a'
  6. if (inicio != std::string::npos) {
  7.  fin = cadena.find('a', inicio + 1);
  8.  subcadena = cadena.substr(inicio, fin - inicio);
  9. }

Ya sólo te faltaría crear el programa y hacer un bucle basándote en esto.
En línea

gomezjuan

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Dividir cadena en subcadena C++
« Respuesta #4 en: 18 Mayo 2020, 12:53 »

Vale, muchas gracias.
La cadena la introduce el usuario por consola y he controlado la entrada para que siempre empiece por a, si el usuario introduce la cadena que tu has dado me daría error y finalizaría problema.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
dividir cadena letra por letra
Scripting
morenochico 3 7,208 Último mensaje 3 Julio 2009, 18:46
por leogtz
una subcadena dentro de una cadena
Programación Visual Basic
minette1988 2 5,528 Último mensaje 24 Mayo 2010, 16:31
por Dessa
[DUDA C] Dividir cadena en subcadenas (similar argv)
Programación C/C++
setwarn 2 6,301 Último mensaje 6 Diciembre 2010, 18:01
por setwarn
[C] Contar subcadena en una cadena
Programación C/C++
_*p 0 3,199 Último mensaje 18 Febrero 2011, 19:18
por _*p
Ayuda con subcadena de tipo char
Programación C/C++
Beginner Web 9 863 Último mensaje 6 Julio 2018, 04:29
por engel lex
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines