Título: Contar caracters Publicado por: kokokoko en 9 Marzo 2012, 18:44 pm Hola. Estoy aprendiendo a usar el c++ y me estoy metiendo con el tema de los arrays. Ahora estoy intentando hacer un programa que ingreses una frase y cuenta el numero de cada tipo de letras pero nose ni por donde empezar. Alguien me podria guiar un poco?
Título: Re: Contar caracters Publicado por: nirvguy en 9 Marzo 2012, 19:06 pm Creas un array en el que cada indice represente un caracter (a,b,c,d,e,f,g,h,i,j,etc) y metes de valor la cantidad de veces que se uso. ¿De que tamaño? fijate que si trabajas con chars los chars van de -127 a 127.
Algo asi, por ejemplo Código Espero haberte dado una guía. Título: Re: Contar caracters Publicado por: Stone20 en 9 Marzo 2012, 20:52 pm Código
Algo asi creo que funcionaria.Para que funcione mejor asegurate de convertir la cadena que entres a minusculas. Título: Re: Contar caracters Publicado por: kokokoko en 10 Marzo 2012, 15:15 pm De momento e sacado el numero de letras de la frase. Ahora quiero que me diga si por ejemplo introduzca la letra a me diga hay tantas a.
aqui el codigo. Código: #include <stdio.h> Título: Re: Contar caracters Publicado por: Xandrete en 10 Marzo 2012, 16:00 pm Creas un array en el que cada indice represente un caracter (a,b,c,d,e,f,g,h,i,j,etc) y metes de valor la cantidad de veces que se uso. ¿De que tamaño? fijate que si trabajas con chars los chars van de -127 a 127. Algo asi, por ejemplo Código Espero haberte dado una guía. Sólo una cosa. El tipo char tiene asociado el rango [-128,127], no el [-127,127]. Codificación Ca2. Por otro lado, quisiera recomendar la buena costumbre de utilizar operaciones aritméticas con caracteres. Por ejemplo, si se desea crear un array con una posición para cada letra minúscula. crearlo como int array['z'-'a'+1]. De esta manera quedará más clara la función del array y nos aseguramos de no haber contado mal las letras del abecedario >.< Y también me gustaría aconsejar usar la directiva define o declarar variables constantes para asignar identificadores: Código
Código
Cuando haces programas largos, ver un puñado de 27's o 42's por ahí puede ser muy confuso. De cara a la depuración y a la modificación, es más gratificante que cada constante tenga su identificador. Código
Algo asi creo que funcionaria.Para que funcione mejor asegurate de convertir la cadena que entres a minusculas. No es necesario desplegar esa maquinaria para saber si un carácter es una letra. Para saber si un carácter c es una letra (minúscula, pongamos, para simplificar), basta con comparar si es mayor o igual que 'a' y menor o igual que 'z'. No hace falta, pues, meter otro bucle dentro del primer for, y te ahorras ese string abc. En la librería cctype hay una función que te hace esto ya. Se llama isalpha() y recibe un parámetro de tipo char. Devuelve true si el parámetro es una letra, ya sea minúscula o mayúscula y falso en caso contrario. Saludos Título: Re: Contar caracters Publicado por: kokokoko en 10 Marzo 2012, 18:32 pm Ahora e seguido un poco más pero me da un error cuando introduzco una letra porque en el contador solo me sale 1. miren:
Código: #include<stdio.h> Título: Re: Contar caracters Publicado por: Stone20 en 10 Marzo 2012, 19:35 pm No es necesario desplegar esa maquinaria para saber si un carácter es una letra. Para saber si un carácter c es una letra (minúscula, pongamos, para simplificar), basta con comparar si es mayor o igual que 'a' y menor o igual que 'z'. No hace falta, pues, meter otro bucle dentro del primer for, y te ahorras ese string abc. En la librería cctype hay una función que te hace esto ya. Se llama isalpha() y recibe un parámetro de tipo char. Devuelve true si el parámetro es una letra, ya sea minúscula o mayúscula y falso en caso contrario. Saludos No lo hago para saber si es una letra,sino para saber que letra es,osea a que contador sumarle +1.Imagino que habrá mejores maneras,era un ejemplo. EI: juntando mensajes. Ahora e seguido un poco más pero me da un error cuando introduzco una letra porque en el contador solo me sale 1. miren: Código: #include<stdio.h> Cuando introduces una letra la guarda en b y entonces strlen(b) solo te devuelve uno(has introducido una letra). Título: Re: Contar caracters Publicado por: kokokoko en 10 Marzo 2012, 21:37 pm entonces que tengo que poner?, es que nose que funcion puede contar el número de cada letra para que luego lo imprima..
Título: Re: Contar caracters Publicado por: Sagrini en 10 Marzo 2012, 21:56 pm Código
Título: Re: Contar caracters Publicado por: rir3760 en 11 Marzo 2012, 01:55 am Advierto: para variar me voy a pasar de "pesadito" (mas bien [CENSORED]).
Sólo una cosa. El tipo char tiene asociado el rango [-128,127], no el [-127,127]. Codificación Ca2. No exactamente. Es mas complicado.Para empezar el tipo "char" es equivalente a "signed char" (lo usual, al menos en PCs de escritorio) o "unsigned char" y, aquí el problema, eso es "implementation defined". Por ello el rango valido del tipo "char" es CHAR_MIN .. CHAR_MAX (ambas macros cortesía del encabezado <limits.h>). En el caso del tipo "signed char" y considerando que el mínimo numero de bits que lo componen es ocho su rango mínimo garantizado es -127 .. 127. Ello porque el estándar de C no especifica como serán representados los números negativos. De nuevo lo usual es complemento a dos pero bien puede utilizarse complemento a uno o magnitud con signo y en ese caso se debe considerar al (inútil) cero negativo. Por otro lado, quisiera recomendar la buena costumbre de utilizar operaciones aritméticas con caracteres. Por ejemplo, si se desea crear un array con una posición para cada letra minúscula. crearlo como int array['z'-'a'+1]. De esta manera quedará más clara la función del array y nos aseguramos de no haber contado mal las letras del abecedario >.< Cuando las macros resultan en expresiones la convención es colocarlas delimitadas por paréntesis, de no hacerlo se pueden presentar casos donde la expresión termina con resultados no deseados, por ejemplo si declaramos un array con el doble de elementos:Y también me gustaría aconsejar usar la directiva define o declarar variables constantes para asignar identificadores: Código
Código Se presenta un error lógico. Un saludo Título: Re: Contar caracters Publicado por: Xandrete en 11 Marzo 2012, 14:37 pm Advierto: para variar me voy a pasar de "pesadito" (mas bien [CENSORED]). No exactamente. Es mas complicado. Para empezar el tipo "char" es equivalente a "signed char" (lo usual, al menos en PCs de escritorio) o "unsigned char" y, aquí el problema, eso es "implementation defined". Por ello el rango valido del tipo "char" es CHAR_MIN .. CHAR_MAX (ambas macros cortesía del encabezado <limits.h>). En el caso del tipo "signed char" y considerando que el mínimo numero de bits que lo componen es ocho su rango mínimo garantizado es -127 .. 127. Ello porque el estándar de C no especifica como serán representados los números negativos. De nuevo lo usual es complemento a dos pero bien puede utilizarse complemento a uno o magnitud con signo y en ese caso se debe considerar al (inútil) cero negativo. Cuando las macros resultan en expresiones la convención es colocarlas delimitadas por paréntesis, de no hacerlo se pueden presentar casos donde la expresión termina con resultados no deseados, por ejemplo si declaramos un array con el doble de elementos: Código Se presenta un error lógico. Un saludo No, tampoco [CENSORED] :D. Es bueno que te corrijan. Saludos. |