Encontrar cuantas veces se repite una letra en una cadena en C

Iniciado por fernando1122, 15 Octubre 2017, 23:45 PM

0 Miembros y 1 Visitante están viendo este tema.

fernando1122

Hola, soy nuevo programando y necesito hacer un programa que muestre las veces que una letra se repite en una cadena. Lenguaje C
Gracias :-(

engel lex

#1
hola! se resuelen dudas, no se entregan codigos listos

el tema fue movido a su respectivo subforo

en general, un cliclo que recorra la cadena y una variable para contar, basta
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fernando1122

cuando ejecuto me aparece "segmentation fault"
#include <stdio.h>

int find(char *cadena, char letra_a_contar)
{
    int acc = 0;
    for(int i = 0; 100 ; i++) {
        if (cadena[i+1] == letra_a_contar) {
            acc = acc+1;
        }
    }
    return acc;
}
int main()
{
    char *cad = NULL;
    char letra_a_buscar = 0;
    int res = 0;
    printf("Escribe la cadena:");
    scanf("%s", cad);
    printf("Escribe la letra que quieres contar:");
    scanf("%c", & letra_a_buscar);
    res = find(cad, letra_a_buscar);
    printf("%i", res);
    return 0;
}

engel lex

tienes errores...

for(int i = 0; 100 ; i++) {

el segundo argumento simplemente pusiste 100.... eso debe ser i<100 (si no, esto será un ciclo infinito)

char *cad = NULL;

declaraste el puntero cad, pero nunca le alojaste memoria para almacenar, esto es lo que te da el segmentation fault... estás intentando escribir en la posición de memoria NULL
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fernando1122

entonces en lugar de NULL que me recomiendas poner?
el programa donde estoy trabajando ( cloud 9 ) me recomendo NULL

engel lex

Claro la recomendación es null, pero debes apartar luego el espacio... si quieres reservar el espacio inicialmente

char cad[100];

recuerda que de 100, puedes usar 99 ya que por lo general siempre al final del texto va \0 que es el caracter de fin de texto
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

fernando1122

#6
he cambiado mi programa y ahora si me pide la cadena, el tamaño, y la letra que quiero contar pero me arroja como resultado 0
¿alguna sugerencia?
#include <stdio.h>

int find(char *cadena, char letra_a_contar, int size)
{
   int acc = 0;
   for(int i = 0; i < size ; i++) {
       if (cadena[i] == letra_a_contar) {
           acc = acc+1;
       }
   }
   return acc;
}
int main()
{
   char cad[9];
   int size;
   int letra_a_buscar;
   int res = 0;
   printf("Escribe la cadena:");
   scanf("%s", cad);
   printf("dame el tamaño de tu cadena:");
   scanf("%i",&size);
   printf("Escribe la letra que quieres contar:");
   scanf("%i",&letra_a_buscar);
   res = find(cad, letra_a_buscar, size);
   printf("%i", res);
   return 0;
}




fernando1122


polako

Como querias guardar una letra era "%s" no "%i"


#include <stdio.h>

int find(char *cadena, char letra_a_contar, int size)
{
    int acc = 0;
    for(int i = 0; i < size ; i++) {
        if (cadena == letra_a_contar) {
            acc = acc+1;
        }
    }
    return acc;
}
int main()
{
    char cad[9];
    int size;
    int letra_a_buscar;
    int res = 0;
    printf("Escribe la frase:");
    scanf("%s",&cad);
    printf("Cuantas letras tiene la frase:");
    scanf("%i",&size);
    printf("Escribe la letra que quieres contar:");
    scanf("%s",&letra_a_buscar);
    res = find(cad, letra_a_buscar, size);
    printf("%i", res);
    return 0;
}