• Viernes 26 de Abril de 2024, 20:23

Autor Tema:  Problema Con Cadenas  (Leído 2950 veces)

cazadorite

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Problema Con Cadenas
« en: Martes 1 de Enero de 2008, 14:31 »
0
hi gente feliz año nuevo :kicking:  
un ejercicio pide:
dado un caracter y una lista de 100 palabras, se pide informar la cantidad total de veces que ese caracter aparece en estas 100 palabras. se recomienda usar una funcion contar que reciba un caracter y una cadena y retorne la cantidad de veces que ese caracter aparece en esa cadena.
yo estaba x hacer un vector de cadenas de vc[100][10] de 10 caracteres. pero no se como hacer para recorrer cada cadena y verificar caracter. x eso use 1 cadena y me fijo cuantas veces esta ese caracter.
lo que quiero saber si se puede agarrar un vector de cadena y ir analizando cada caracter..
anda solo turbo c++ 3.0
Código: Text
  1.  
  2.  #include <stdio.h>
  3. #include <string.h>
  4. #include <conio.h>                 //codigo robado alterado
  5.  
  6. /* Almacena cada una de las palabras */
  7. char palabras[100][200];
  8. /* Almacena el numero de palabras */
  9. int numeroPalabras;
  10. /* Almacena numero de vocales distintas de cada palabra */
  11.  
  12.  
  13. /*
  14.    Funcion que recoge una cadena y almacena palabra a palabra en el
  15.    arreglo: palabras
  16. */
  17. void SacarPalabras(char *cadena)
  18. {
  19.    int contador = 0;
  20.   char c, anterior='\r';
  21.    /* Reinicia numero de palabras */
  22.    numeroPalabras=0;
  23.  
  24.    /* Recorre cadena caracter a caracter */
  25.    for(int i=0; i<=strlen(cadena); i++)
  26.    {
  27.       c = cadena[i];
  28.  
  29.       /*
  30.        Se considera palabra nueva cuando
  31.        el caracter actual es: ' ',  '\n', '\r', '\0'
  32.        y el caracter anterior es distinto de: ' ',  '\n', '\r', '\0'
  33.       */
  34.  
  35.       if(c==' ' || c=='\n' || c=='\r' || c=='\0')
  36.       {
  37.         if(anterior!=' ' && anterior!='\n' && anterior!='\r' && anterior!='\0')
  38.         {
  39.           /* Coloca caracter de fin de cadena ('\0')  */
  40.           palabras[numeroPalabras][contador] = '\0';
  41.           /* Aumenta el numero de palabras en 1 */
  42.           numeroPalabras++;
  43.           /* Reinicia el contador de caracteres de la palabra */
  44.           contador = 0;
  45.         }
  46.       }
  47.       else
  48.       {
  49.         /* Coloca el caracter leido en el arreglo  */
  50.       palabras[numeroPalabras][contador] = c;
  51.         /* Aumenta el contador de caracteres de la palabra */
  52.       contador++;
  53.     }
  54.     anterior = c;
  55.   }
  56. }
  57.  
  58.  
  59. /* Saca vocales distintas de las palabras */
  60. int SacarVocales(char l)
  61. {
  62.   char c;
  63.   /* Variables que contendran 1 si aparece la vocal, 0 si no aparece la vocal en la palabra */
  64.  
  65.   int ct=0;
  66.   for(int j=0; j<numeroPalabras; j++)
  67.   {
  68.     /* Reinicia contadores de cada vocal */
  69.  
  70.  
  71.     for(int k=0; k<strlen(palabras[j]); k++)
  72.     {
  73.   /* Recoge caracter y verifica que vocal es */
  74.   /* No se distingue entre mayusculas y minusculas */
  75.   c=palabras[j][k];
  76.  
  77.   if(c==l)
  78.   {
  79.     ct++;
  80.   }
  81.  
  82.   }
  83.   }
  84. return ct;
  85. }
  86.  
  87.  
  88. void main(void)
  89. {
  90.   char *cadena,l;
  91.   int i, contador=0;
  92.   int ct;
  93.   clrscr();
  94.   printf("Ingrese cadena: ");
  95.   gets(cadena);
  96.   printf("caracter ");
  97.   scanf("%c",&l);
  98.  
  99.   SacarPalabras(cadena);
  100.   SacarVocales(l);
  101.   printf("caracter %c aparecio en texto %d veces ",l, SacarVocales(l));
  102.  
  103.  
  104. getch();
  105. }
  106.  
  107.