Autor
|
Tema: Contar caracters (Leído 7,162 veces)
|
kokokoko
Desconectado
Mensajes: 10
|
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?
|
|
|
En línea
|
|
|
|
nirvguy
Desconectado
Mensajes: 23
|
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 arr[65]=12; /*12 veces se uso la A*/
Espero haberte dado una guía.
|
|
|
En línea
|
Todas mis letras han sido pedazos de poesía y los pedazos de poesía se toman de poemas que comúnmente no tienen sentido en primer termino. Kurt Cobain
|
|
|
Stone20
Desconectado
Mensajes: 7
|
#include <iostream> #include <vector> #include <string> using namespace std; int main(){ string abc= "abcdefghijklmnñopqrstuvwxy"; vector<int> conta(26); string miCadena = "ejemplo de un tio que pregunta en un foro"; for(int i=0;i < miCadena.size();i++) for(int j=0;j < abc.size();j++) if(miCadena[i] == abc[j]) conta[j]++; for(int k=0;k < conta.size();k++) cout << "Letra " << abc[k] << " aparece " << conta[k] << " veces." << endl; return 0; }
Algo asi creo que funcionaria.Para que funcione mejor asegurate de convertir la cadena que entres a minusculas.
|
|
« Última modificación: 9 Marzo 2012, 20:58 pm por Stone20 »
|
En línea
|
|
|
|
kokokoko
Desconectado
Mensajes: 10
|
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. #include <stdio.h> #include <string.h>
#define FRASE 100
int main(void) { char a[FRASE+1]; int l; char q; printf ("Introduce una frase: ", FRASE); gets(a); l = strlen(a); printf ("Longitud de la cadena: %d\n", l); printf("Que letra quieres contar:"); scanf("%hh",&q); system("pause"); return 0; }
|
|
|
En línea
|
|
|
|
Xandrete
Desconectado
Mensajes: 210
|
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 arr[65]=12; /*12 veces se uso la A*/
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: #define NUMOFLETTERS 'z'-'a'+1 ... int array[NUMOFLETTERS];
int const NUMOFLETTERS = 'z'-'a'+1 ... int array[NUMOFLETTERS];
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. #include <iostream> #include <vector> #include <string> using namespace std; int main(){ string abc= "abcdefghijklmnñopqrstuvwxy"; vector<int> conta(26); string miCadena = "ejemplo de un tio que pregunta en un foro"; for(int i=0;i < miCadena.size();i++) for(int j=0;j < abc.size();j++) if(miCadena[i] == abc[j]) conta[j]++; for(int k=0;k < conta.size();k++) cout << "Letra " << abc[k] << " aparece " << conta[k] << " veces." << endl; return 0; }
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
|
|
« Última modificación: 10 Marzo 2012, 16:09 pm por Xandrete »
|
En línea
|
|
|
|
kokokoko
Desconectado
Mensajes: 10
|
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: #include<stdio.h> #define FRASE 100
main() { char b[29]= "qwertyuiopasdfghjklñçzxcvbnm"; char a[FRASE+1]; int l,d; printf("Introduce una frase:",FRASE); gets(a); l=strlen(a); printf("longitud de la frase:""%d\n",l); printf("Introduce una letra:",b); gets(b); d=strlen(b); printf("La cantidad de la letra es:""%d\n",d); system("pause"); return 0; }
|
|
« Última modificación: 10 Marzo 2012, 18:59 pm por kokokoko »
|
En línea
|
|
|
|
Stone20
Desconectado
Mensajes: 7
|
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: #include<stdio.h> #define FRASE 100
main() { char b[29]= "qwertyuiopasdfghjklñçzxcvbnm"; char a[FRASE+1]; int l,d; printf("Introduce una frase:",FRASE); gets(a); l=strlen(a); printf("longitud de la frase:""%d\n",l); printf("Introduce una letra:",b); gets(b); d=strlen(b); printf("La cantidad de la letra es:""%d\n",d); system("pause"); return 0; } Cuando introduces una letra la guarda en b y entonces strlen(b) solo te devuelve uno(has introducido una letra).
|
|
« Última modificación: 10 Marzo 2012, 22:46 pm por Eternal Idol »
|
En línea
|
|
|
|
kokokoko
Desconectado
Mensajes: 10
|
entonces que tengo que poner?, es que nose que funcion puede contar el número de cada letra para que luego lo imprima..
|
|
« Última modificación: 10 Marzo 2012, 21:46 pm por kokokoko »
|
En línea
|
|
|
|
Sagrini
|
#include <stdio.h> #include <string.h> int main () { char buffer [32], letra; int i=0, cont=0; printf ("Cadena: "); read (0, buffer , 32); for (i =0; buffer [i ] != '\0' && buffer [i ] != '\n' && i !=32; i ++); buffer [i ]='\0'; printf ("Letra: "); read (0, &letra , 1); for (i=0; i<strlen (buffer); i++) if (buffer[i]==letra) cont++; printf ("La letra %c aparace %d veces\n", letra , cont ); return 0; }
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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 >.< Y también me gustaría aconsejar usar la directiva define o declarar variables constantes para asignar identificadores: #define NUMOFLETTERS 'z'-'a'+1 ... int array[NUMOFLETTERS];
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: int array[NUMOFLETTERS * 2];
Se presenta un error lógico. Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Contar variables
PHP
|
Riki_89D
|
6
|
3,637
|
11 Marzo 2009, 13:44 pm
por eLank0
|
|
|
contar caracteres
Scripting
|
minette1988
|
3
|
16,974
|
13 Mayo 2010, 23:31 pm
por leogtz
|
|
|
Caracters raros :S Keylogger
.NET (C#, VB.NET, ASP)
|
BrokerJoker
|
0
|
2,111
|
11 Enero 2012, 09:33 am
por BrokerJoker
|
|
|
Los caracters y letras de un keylogguer -.-''
.NET (C#, VB.NET, ASP)
|
BrokerJoker
|
7
|
5,342
|
11 Abril 2012, 14:58 pm
por Maurice_Lupin
|
|
|
Contar registros
.NET (C#, VB.NET, ASP)
|
celino
|
6
|
5,553
|
30 Abril 2012, 15:58 pm
por $Edu$
|
|