• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    Samsung duplica su eficiencia en sus nuevos chips de 3 nanómetros

    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • C / C++ »
    • Ayuda con C contar apariciones de una letra en una cadena
    • Imprimir
    Páginas: 1 [2]   Ir Abajo

    Autor Tema: Ayuda con C contar apariciones de una letra en una cadena  (Leído 12615 veces)

    Desconectado elpre

    • { L2 } Nativo Digital
    • **
    • Mensajes: 141
      • Ver Perfil
    Re:Ayuda con C contar apariciones de una letra en una cadena
    « Respuesta #10 en: Abril 09, 2013, 02:37:18 am »
    Antes de cerrar una preguntilla que tiene que ver con el tema y no ya que acabo de comprobarlo ahora mismo.
    He compilado el programa, tanto el de JAG como el r1ghtz0 y acabo de fijarme que cuando introduzco la frase al dar enter se cierra la aplicación. He probado a poner getchar() al final para forzar en enter y me pasa lo mismo. Para arreglarlo al pedir la frase en vez de con scanf lo he hecho con gets y ahora el de JAG sí funciona, el r1ghtz0 me da resultados raros.
    Por no abrir otro tema, será cosa del compilador?? utilizo dev-c++ version 4.9.9.2
    En línea

    Desconectado r1ghtz0

    • { L4 } Geek
    • ****
    • Mensajes: 303
    • Estudiando
      • Ver Perfil
    Re:Ayuda con C contar apariciones de una letra en una cadena
    « Respuesta #11 en: Abril 09, 2013, 02:43:43 am »
    Cita de: elpre en Abril 09, 2013, 02:37:18 am
    Antes de cerrar una preguntilla que tiene que ver con el tema y no ya que acabo de comprobarlo ahora mismo.
    He compilado el programa, tanto el de JAG como el r1ghtz0 y acabo de fijarme que cuando introduzco la frase al dar enter se cierra la aplicación. He probado a poner getchar() al final para forzar en enter y me pasa lo mismo. Para arreglarlo al pedir la frase en vez de con scanf lo he hecho con gets y ahora el de JAG sí funciona, el r1ghtz0 me da resultados raros.
    Por no abrir otro tema, será cosa del compilador?? utilizo dev-c++ version 4.9.9.2

    De verdad a mi si me funciona el hice yo, ingreso 10 'e' y me da como resultado que la 'e' se repite 10 veces. Es posible que sea el compilador como dices, yo no uso wind, uso linux mint y compilo con Geany.
    En línea

    Desconectado cipos

    • { L0 } Ñuub
    • Mensajes: 20
      • Ver Perfil
    Re:Ayuda con C contar apariciones de una letra en una cadena
    « Respuesta #12 en: Abril 09, 2013, 02:45:57 am »
     Ahí esta un poco más orientado el problema. Aunque sigo viendo errores.

    Código: [Seleccionar]
        for(i= 0 ; i<=cad[i] ; i++){

     La condición de parada debe ser "i < (tamaño de la cadena)". estas haciendo "i <= (que el elemento de la posición i-ésima). Lo cuál no tiene sentido.

     Además (de esto no estoy seguro, hace un tiempo que no toco C, corrijanme si me equivoco) la forma en la que almacenas la cadena la variable cad no es conveniente. Prueba en tipear una cadena con espacios, por ejemplo:

     "e e e e"

     Si no me equivoco eso devolvería 1. Ya que "cuenta" hasta el primer espacio. Para "arreglar" eso yo cambiaría esta parte del código:

    Código: [Seleccionar]
    printf("Ingrese una cadena de caracteres: ");
        scanf("%s", cad);
     
    Por:

    Código: [Seleccionar]
    printf("Ingrese una cadena de caracteras: ");
    scanf(" %[^\n]", cad);


     Saludos!.

    EDITO:

    Cita de: elpre en Abril 09, 2013, 02:37:18 am
    He compilado el programa, tanto el de JAG como el r1ghtz0 y acabo de fijarme que cuando introduzco la frase al dar enter se cierra la aplicación. He probado a poner getchar() al final para forzar en enter y me pasa lo mismo.

     Prueba de correr la aplicación desde simbolo de sistema de Windows, así no se te va a cerrar la ventana.

     Y los resultados raros se deben a que en el for la condición de parada está mal. Arriba en mi respuesta le comente sobre esto a r1ghtz0

    « Última modificación: Abril 09, 2013, 02:50:39 am por cipos »
    En línea

    Desconectado JAG

    • { L7 } Juanker
    • *******
    • Mensajes: 1561
      • Ver Perfil
    Re:Ayuda con C contar apariciones de una letra en una cadena
    « Respuesta #13 en: Abril 09, 2013, 10:04:59 am »
    También pueden deberse los resultados raros a que rep que es el contador no lo inicializas a 0. Como apunta cipos sigue habiendo errores en el que hiciste y también es cierto lo de que cuenta hasta el primer espacio, buen apunte cipos!
    En cuanto a lo que comentas elpre, es que yo lo compilé desde la consola de linux... entonces no se me cierra xD puedes poner lo siguiente y hasta que no pulses enter no se saldrá:
    while(getchar()!='\n');

    Saludos!!
    En línea

    Desconectado elpre

    • { L2 } Nativo Digital
    • **
    • Mensajes: 141
      • Ver Perfil
    Re:Ayuda con C contar apariciones de una letra en una cadena
    « Respuesta #14 en: Abril 09, 2013, 04:39:02 pm »
    Ok, voy a probar con linux y también con el while. De todas formas pensaba que con solo poner getchar() era suficiente para eso. Aún así tiene que ser el compilador seguro porque ha sido poner gets(cad) y funcionar, buscaré en internet a ver si pone algo al respecto

    Edito: lo de los espacios es verdad con scanf, si se utiliza gets se pueden poner espacios y los cuenta. Con linux al hacerlo con consola no se me sale (evidente) pero me ha surgido una pequeña duda y es que he modificado un poco el programa y en vez de ponerle la letra al declarar la variable, hago que se pida y resulta que si hago:
    Código: [Seleccionar]
    printf("\nIntroduce cadena: ");
     scanf("%s",cadena);
     printf("\nIntroduce letra a buscar: ");
     scanf("%c",&letra);
    En este caso la instrucción de "introduce letra a buscar me la salta (me la imprime en pantalla pero no me deja poner la letra. En cambio si hago
    Código: [Seleccionar]
    printf("\nIntroduce cadena: ");
     gets(cadena);
     printf("\nIntroduce letra a buscar: ");
     scanf("%c",&letra);
    Con este caso todo perfecto
    « Última modificación: Abril 09, 2013, 11:11:05 pm por elpre »
    En línea

    Desconectado k133

    • { L3 } Über
    • ***
    • Mensajes: 201
      • Ver Perfil
    Re:Ayuda con C contar apariciones de una letra en una cadena
    « Respuesta #15 en: Abril 12, 2013, 10:29:39 pm »
    @elpre
    Creo que eso te pasa por que no limpias el buffer de entrada, revisa:
    http://foro.hackxcrack.net/forum/index.php?topic=17849.0
    En línea
    Linux member #545609


    • Imprimir
    Páginas: 1 [2]   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • C / C++ »
    • Ayuda con C contar apariciones de una letra en una cadena
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more