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

Duda sobre ejercicio de cadena de caracteres C++

Estas en el tema de Duda sobre ejercicio de cadena de caracteres C++ en el foro de C/C++ en Foros del Web. Buenas a todos, soy nuevo por aquí. Estoy estudiando teleco y estoy a ver si recupero Programación I para septiembre. Se me plantea el siguiente ...
  #1 (permalink)  
Antiguo 10/08/2015, 09:22
 
Fecha de Ingreso: agosto-2015
Ubicación: Andalucía
Mensajes: 2
Antigüedad: 8 años, 8 meses
Puntos: 0
Duda sobre ejercicio de cadena de caracteres C++

Buenas a todos, soy nuevo por aquí. Estoy estudiando teleco y estoy a ver si recupero Programación I para septiembre.

Se me plantea el siguiente ejercicio con la función principal definida y yo tengo que definir los subprogramas. Acabo de terminar de escribir todo el código, he ido a probar la función longitud y me encuentro con que no me devuelve ningún valor. Le he metido un cout para ver el valor que toma "i" pero tampoco me muestra nada.
Es bastante raro. Ya había tenido este problema.
Os paso el código, a ver si me podéis decir qué le pasa.

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. typedef char TCadena [];
  6.  
  7.  
  8. int longitud(const TCadena cad);
  9. // Calcula el nº de caracteres de la cadena
  10.  
  11. //- Caracteres en cadenas ----------------------------------------------
  12.  
  13. unsigned ocurrencias(const char c, const TCadena cad);
  14. // Calcula el nº de veces que aparece el caracter c en la cadena cad
  15.  
  16. bool aparece(const char c, const TCadena cad);
  17. // Determina si el caracter c aparece o no en la cadena cad
  18.  
  19. int posicion(const char c, const TCadena cad);
  20. // Calcula la primera posición en la que aparece c en la cadena cad.
  21. // Devuelve -1 cuando no aparece
  22.  
  23. //- Subcadenas en textos -----------------------------------------------
  24.  
  25. bool es_prefijo(const TCadena pref, const TCadena cad);
  26. // Determina si pref es o no prefijo de cad
  27.  
  28. bool aparece(const TCadena subcad, const TCadena cad,
  29.                                       const unsigned pos);
  30. // Determina si subcad aparece o no en la posición pos dentro de cad
  31.  
  32. int posicion(const TCadena subcad, const TCadena cad);
  33. // Calcula la primera posición en la que aparece subcad dentro de cad.
  34. // Devuelve -1 cuando no aparece.
  35.  
  36.  
  37. //- Programa de prueba -------------------------------------------------
  38.  
  39. int main(){
  40.   setlocale(LC_ALL, "spanish");
  41.  
  42.   char c, cadena[80], subcadena[80];
  43.   unsigned opcion;
  44.   bool ok;
  45.   do{
  46.         cout << "[1] - Calcular la longitud de una cadena\n";
  47.         cout << "[2] - Buscar un carácter en una cadena\n";
  48.         cout << "[3] - Buscar una palabra en un texto\n";
  49.         cout << "[0] - Terminar\n";
  50.         cout << "Elija una opción: ";
  51.         cin >> opcion;
  52.         switch(opcion){
  53.         case 0: break;
  54.         case 1:
  55.             cout << "Escriba una cadena: \n";
  56.             cin >> ws;
  57.             cin.getline(cadena,79);
  58.             cout << "La cadena tiene " << longitud(cadena)
  59.                  << " caracteres\n";
  60.             break;
  61.         case 2:
  62.             cout << "Escriba una cadena: \n";
  63.             cin >> ws;
  64.             cin.getline(cadena,79);
  65.             cout << "Escriba un carácter: ";
  66.             cin >> c;
  67.  
  68.             cout << "El carácter " << (aparece(c, cadena)? "" : " no ")
  69.                  << "aparece en la cadena\n";
  70.  
  71.             cout << "El carácter está " << ocurrencias(c, cadena)
  72.                  << " veces en la cadena\n";
  73.  
  74.             cout << "La primera aparición es en la posición "
  75.                  << posicion(c,cadena) << endl;
  76.             break;
  77.         case 3:
  78.             cout << "Escriba un texto: \n";
  79.             cin >> ws;
  80.             cin.getline(cadena,79);
  81.  
  82.             cout << "Escriba una cadena: \n";
  83.             cin >> ws;
  84.             cin.getline(subcadena,79);
  85.  
  86.             cout << "La cadena "
  87.                  << (es_prefijo(subcadena,cadena)? "es" : "no es")
  88.                  << " prefijo del texto\n";
  89.  
  90.             if (posicion(subcadena, cadena) >= 0)
  91.                 cout << "La cadena aparece en la posición "
  92.                      << posicion(subcadena,cadena) << " del texto\n";
  93.             else
  94.                 cout << "La cadena no aparece en el texto\n";
  95.             break;
  96.         }
  97.         cout << endl;
  98.       } while(opcion != 0);
  99.  
  100.   return 0;
  101. }
  102.  
  103. // Definiciones de funciones -------------------------------------------
  104. int longitud(const TCadena cad){
  105.     int i=0;
  106.     while(cad[i]!='/0') ++i;
  107.     return i;
  108. }
  109.  
  110.  
  111. bool aparece(const char c, const TCadena cad){
  112.     bool esta=false;
  113.     int i=0;
  114.     while(!esta && cad[i]!='/0'){
  115.         if(cad[i]==c) esta=true;
  116.         else ++i;
  117.     }//end while
  118.     return esta;
  119. }
  120.  
  121. unsigned ocurrencias(const char c, const TCadena cad){
  122.     int i=0;
  123.     unsigned veces=0;
  124.     while(cad[i]!='/0'){
  125.         if(cad[i]==c) ++veces;
  126.         ++i;
  127.     }//end while
  128.     return veces;
  129. }
  130.  
  131. int posicion(const char c, const TCadena cad){
  132.     int i=0, pos=-1;
  133.     while (cad[i]!='/0' and pos==-1){
  134.         if(cad[i]==c) pos=i;
  135.         ++i;
  136.     }//end while
  137.     return pos;
  138. }
  139.  
  140.  
  141. bool es_prefijo(const TCadena pref, const TCadena cad){
  142.     bool prefijo=true;
  143.     int i=0;
  144.     do{
  145.         if(pref[i]!=cad[i]) prefijo=false;
  146.         ++i;
  147.     }while(prefijo and pref[i]!='/0');
  148.  
  149.     return prefijo;
  150. }
  151.  
  152. bool aparece(const TCadena subcad, const TCadena cad, const unsigned pos){
  153.     bool esta=true;
  154.     int i=pos;
  155.     do{
  156.         if(subcad[i]!=cad[i]) esta=false;
  157.         ++i;
  158.     }while(esta and subcad[i]!='/0');
  159.  
  160.     return esta;
  161. }
  162.  
  163. int posicion(const TCadena subcad, const TCadena cad){
  164.     int a=0, b=0;
  165.     while(b<=(longitud(cad)-longitud(subcad))){
  166.         if(subcad[a]==cad[b]) ++a;
  167.         ++b;
  168.     }//end while
  169.     if(subcad[a]=='/0') return b-a;
  170.     else return -1;
  171. }
  #2 (permalink)  
Antiguo 10/08/2015, 10:56
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Duda sobre ejercicio de cadena de caracteres C++

El caracter no es '/0' sino '\0' ese es el motivo de que no te funcione.

Etiquetas: cadena, caracteres, char, ejercicio, funcion, int, programa
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 01:09.