Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/04/2014, 09:20
zaico77
 
Fecha de Ingreso: febrero-2014
Mensajes: 12
Antigüedad: 10 años, 3 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.