SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: jusit en Jueves 4 de Febrero de 2010, 12:04

Título: contar letras repetidas en una cadena
Publicado por: jusit en Jueves 4 de Febrero de 2010, 12:04
Hola,
Hace poco que soy nuevo y tengo un problema con un programa que estoy realizando en C. Se me pide que haga un contador de aquellas letras que aparecen repetidas en una cadena utilizando una matriz bidimensional. La verdad es que con una matriz unidimensional si que lo pude hacer, pero con una de dos no se por donde empezar.

Podríais darme alguna pequeña orientación?

Gracias,
Título: Re: contar letras repetidas en una cadena
Publicado por: Aprendiz21Sam en Jueves 4 de Febrero de 2010, 21:23
Pon al menos el código de la matriz unidimensional para ver si es verdad que sabes. Aquí hay normas que impiden que te hagamos los ejercicios, así que pon como lo harías en una matriz unidimensional y entonces te ayudaré con la bidimensional. "Ayudaré, no haré".
Título: Re: contar letras repetidas en una cadena
Publicado por: jusit en Viernes 5 de Febrero de 2010, 10:55
Hola,

Le verdad que yo en ningún momento he pedido la respuesta del problema, tan solo que me dierais una orientación, es decir, una explicación de como enfocar el mismo.

Ahí va la solución del problema hecho para un array unidimensional:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100

int i;
int length;
int ascii;
char cipher[N];
int letters[26];

int main()
{

 printf("Introduce una cadena: ");
    gets(cipher);
    fflush(stdin);
   
    length = strlen(cipher);
   
    for (i=0; i<length; i++)
        {
              ascii = cipher;
             
              if (ascii > 96)
                 ascii = ascii - 97;
              else
                  ascii = ascii - 65;
             
              letters[ascii]++;
           
             
        }
       
        printf("a: %d   ", letters[0]);
        printf("b: %d   ", letters[1]);
        printf("c %d   ", letters[2]);
        printf("d: %dn", letters[3]);
        printf("e: %d   ", letters[4]);
        printf("f: %d   ", letters[5]);
        printf("g: %d   ", letters[6]);
        printf("h: %dn", letters[7]);
        printf("i: %d   ", letters[8]);
        printf("j: %d   ", letters[9]);
        printf("k: %d   ", letters[10]);
        printf("l: %dn", letters[11]);
        printf("m: %d   ", letters[12]);
        printf("n: %d   ", letters[13]);
        printf("o: %d   ", letters[14]);
        printf("p: %dn", letters[15]);
        printf("q: %d   ", letters[16]);
        printf("r: %d   ", letters[17]);
        printf("s: %d   ", letters[18]);
        printf("t: %dn", letters[19]);
        printf("u: %d   ", letters[20]);
        printf("v: %d   ", letters[21]);
        printf("w: %d   ", letters[22]);
        printf("x: %dn", letters[23]);
        printf("y: %d   ", letters[24]);
        printf("z: %d   ", letters[25]);
       
 printf("nn");    
 system("pause");
}

Como dije, si se hacerlo con una/varias tablas unidimensionales, pues las comparas y verificas si esta o no la letra y cuantas veces se repite. En este caso, he usado los valores ASCII para determinar el carácter y almacenar el numero de veces que aparece en una tabla.
Título: Re: contar letras repetidas en una cadena
Publicado por: Garethsoul en Sábado 6 de Febrero de 2010, 00:54
pone el codigo entre corchetes de codigo por favor.  osea entre
Código: C
  1.  
 sin el . asi es mas facil que lo entendamos.
Título: Re: contar letras repetidas en una cadena
Publicado por: jusit en Sábado 6 de Febrero de 2010, 01:12
Código: C
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define N 100
  5.  
  6. int i;
  7. int length;
  8. int ascii;
  9. char cipher[N];
  10. int letters[26];
  11.  
  12. int main()
  13. {
  14.  
  15. printf("Introduce una cadena: ");
  16. gets(cipher);
  17. fflush(stdin);
  18.  
  19. length = strlen(cipher);
  20.  
  21. for (i=0; i<length; i++)
  22. {
  23. ascii = cipher[i];
  24.  
  25. if (ascii > 96)
  26. ascii = ascii - 97;
  27. else
  28. ascii = ascii - 65;
  29.  
  30. letters[ascii]++;
  31.  
  32.  
  33. }
  34.  
  35. printf("a: %d ", letters[0]);
  36. printf("b: %d ", letters[1]);
  37. printf("c %d ", letters[2]);
  38. printf("d: %dn", letters[3]);
  39. printf("e: %d ", letters[4]);
  40. printf("f: %d ", letters[5]);
  41. printf("g: %d ", letters[6]);
  42. printf("h: %dn", letters[7]);
  43. printf("i: %d ", letters[8]);
  44. printf("j: %d ", letters[9]);
  45. printf("k: %d ", letters[10]);
  46. printf("l: %dn", letters[11]);
  47. printf("m: %d ", letters[12]);
  48. printf("n: %d ", letters[13]);
  49. printf("o: %d ", letters[14]);
  50. printf("p: %dn", letters[15]);
  51. printf("q: %d ", letters[16]);
  52. printf("r: %d ", letters[17]);
  53. printf("s: %d ", letters[18]);
  54. printf("t: %dn", letters[19]);
  55. printf("u: %d ", letters[20]);
  56. printf("v: %d ", letters[21]);
  57. printf("w: %d ", letters[22]);
  58. printf("x: %dn", letters[23]);
  59. printf("y: %d ", letters[24]);
  60. printf("z: %d ", letters[25]);
  61.  
  62. printf("nn");
  63. system("pause");
  64. }
  65.  
  66.