Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Como separar en caracteres tipo char una cadena de char o string??

Estas en el tema de Como separar en caracteres tipo char una cadena de char o string?? en el foro de C/C++ en Foros del Web. Buenas, mi duda es la siguiente como puedo separar una cadena de tipo char[] o string a un simple char?? Lo que quiero es pedir ...
  #1 (permalink)  
Antiguo 16/04/2014, 09:20
 
Fecha de Ingreso: febrero-2014
Mensajes: 12
Antigüedad: 10 años, 2 meses
Puntos: 0
Como separar en caracteres tipo char una cadena de char o string??

Buenas, mi duda es la siguiente como puedo separar una cadena de tipo char[] o string a un simple char??

Lo que quiero es pedir una cadena de char y después dividirlo en char para poder meterlo a un switch

Tengo esta función que me divide la cadena cada vez que hay un espacio pero me lo deja como cadena de char aunque sea solo un elemento.

Código C++:
Ver original
  1. char operacion[50];
  2.     cout<<"Ingresa la frase separada por espacios "<<endl;
  3.     cin.getline(operacion,50);
  4.    
  5.     char *ptr;
  6.     ptr = strtok(operacion," ");
  7.     while(ptr != NULL)
  8.     {
  9.         f.encolar(ptr);
  10.         ptr = strtok(NULL, " ");
  11.     }


Entonces si el resultado lo meto en una cola y después lo voy sacando como fueron entrando para ejecutar un switch

Código C++:
Ver original
  1. switch(f.desencolar())
  2. {
  3.   case 'a':
  4. break;
  5. case 'j':
  6. break;
  7. }

me da este error
switch quantity not an integer
y entiendo que es porque esta recibiendo cadena de caracteres y no solo un char.

Y no se si exista otra forma de hacer esto

Por lo que entonces la otra forma que se me ocurre es:

Código C++:
Ver original
  1. char operacion[30];
  2.     cout<<"Ingresa la frase"<<endl;
  3.     cin.getline(operacion,30);
  4.  
  5.    for(int i=0; i<30; i++)
  6. {
  7.  
  8. char c=operacion[i];
  9.  
  10. switch(c)
  11. {
  12.     case 'h':cout<<"Imprime la h"<<endl;
  13.     break;
  14.     case 'o':cout<<"Imprime la o"<<endl;
  15.     break;
  16.     case 'l':cout<<"Imprime la l"<<endl;
  17.     break;
  18.     case 'a':cout<<"Imprime la a"<<endl;
  19.     break;
  20.     case '+':cout<<"Imprime la +"<<endl;
  21.     break;
  22.     case '-':cout<<"Imprime la -"<<endl;
  23.     break;
  24.     case '*':cout<<"Imprime la *"<<endl;
  25.     break;
  26.     case '/':cout<<"Imprime la /"<<endl;
  27.     break;
  28.     case '(':cout<<"Imprime la ("<<endl;
  29.     break;
  30.     case ')':cout<<"Imprime la )"<<endl;
  31.     break;
  32. }
  33. }

Y este si funciona pero el problema es que en la parte donde esta el for
Código C++:
Ver original
  1. for(int i=0; i<30; i++)
no quiero ponerle tamaño definido sino que sea del tamaño exacto que tiene la cadena, porque si por ejemplo yo meto solo "hola" en vez de recorrer 4 espacios recorre los 30 y en ocasiones imprime datos que no existen,

entonces aqui mi duda es

como contar los elementos dentro de un arreglo char??


Bueno de antemano muchas gracias y pues ojala me pudieran ayudar con cualquier de los dos problemas.
  #2 (permalink)  
Antiguo 16/04/2014, 10:20
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Como separar en caracteres tipo char una cadena de char o string??

No tengo muy claro qué es lo que quieres hacer, pero respecto a la 2ª cuestión, siempre puedes sustituir el bucle "for" por un bucle "while" cuya condición de salida sea que el índice sea diferente de '\0';

Algo así:
Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  
  8.         char operacion[30];
  9.         cout<<"Ingresa la frase"<<endl;
  10.         cin.getline(operacion,30);
  11.         int i=0;
  12.  
  13.        while (operacion[i]!='\0')
  14.     {
  15.  
  16.     switch(operacion[i])
  17.     {
  18.         case 'h':cout<<"Imprime la h"<<endl;
  19.         break;
  20.         case 'o':cout<<"Imprime la o"<<endl;
  21.         break;
  22.         case 'l':cout<<"Imprime la l"<<endl;
  23.         break;
  24.         case 'a':cout<<"Imprime la a"<<endl;
  25.         break;
  26.         case '+':cout<<"Imprime la +"<<endl;
  27.         break;
  28.         case '-':cout<<"Imprime la -"<<endl;
  29.         break;
  30.         case '*':cout<<"Imprime la *"<<endl;
  31.         break;
  32.         case '/':cout<<"Imprime la /"<<endl;
  33.         break;
  34.         case '(':cout<<"Imprime la ("<<endl;
  35.         break;
  36.         case ')':cout<<"Imprime la )"<<endl;
  37.         break;
  38.     }
  39.     i++;
  40.     }
  41.     cout<<i;
  42.     return 0;
  43. }
  #3 (permalink)  
Antiguo 16/04/2014, 10:39
 
Fecha de Ingreso: febrero-2014
Mensajes: 12
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Como separar en caracteres tipo char una cadena de char o string??

Ok, muchas gracias
  #4 (permalink)  
Antiguo 16/04/2014, 10:40
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Como separar en caracteres tipo char una cadena de char o string??

Bueno si el problema es saber el tamaño de la frase ;)
Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.  
  5. int main () {
  6.  
  7.    
  8.     string frase;
  9.     cout << "Escribe algo!" << endl;
  10.     getline( cin, frase );
  11.     cout << frase << endl;
  12.     int tamanio = frase.size();
  13.     cout << "tienes " << tamanio << " letras incluyendo espacios ;)" << endl;
  14.    
  15.     cin.ignore();
  16.     return 0;
  17. }

con ese sistema puedes escribir toooooodo lo que quieras XDD
para dividir una cadena por ejemplo el string frase lo tratas como un arreglo.


si le meto: "mamita sopita" a frase

frase[0] = 'm'
frase[1] = 'a'
frase[2] = 'm'
frase[3] = 'i'
frase[4] = 't'
frase[5] = 'a'
frase[6] = ' '
frase[7] = 's'
frase[8] = 'o'
frase[9] = 'p'
frase[10] = 'i'
frase[11] = 't'
frase[12] = 'a'

si imprimo:

cout << frase[7];

me imprime la 's' ;)

Última edición por vangodp; 16/04/2014 a las 10:48

Etiquetas: poo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:05.