elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Contar caracters
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Contar caracters  (Leído 6,633 veces)
kokokoko

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Contar caracters
« 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?


En línea

nirvguy

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Contar caracters
« Respuesta #1 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
  1. arr[65]=12; /*12 veces se uso la A*/
  2.  
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 Desconectado

Mensajes: 7



Ver Perfil
Re: Contar caracters
« Respuesta #2 en: 9 Marzo 2012, 20:52 pm »

Código
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.    string abc= "abcdefghijklmnñopqrstuvwxy";
  9.    vector<int> conta(26);
  10.    string miCadena = "ejemplo de un tio que pregunta en un foro";
  11.  
  12.    for(int i=0;i < miCadena.size();i++)
  13.        for(int j=0;j < abc.size();j++)
  14.            if(miCadena[i] == abc[j]) conta[j]++;
  15.  
  16.  
  17.    for(int k=0;k < conta.size();k++)
  18.        cout << "Letra " << abc[k] << " aparece " << conta[k] << " veces." << endl;
  19.    return 0;
  20. }
  21.  

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 Desconectado

Mensajes: 10


Ver Perfil
Re: Contar caracters
« Respuesta #3 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>
#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 Desconectado

Mensajes: 210



Ver Perfil
Re: Contar caracters
« Respuesta #4 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
  1. arr[65]=12; /*12 veces se uso la A*/
  2.  
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
  1. #define NUMOFLETTERS 'z'-'a'+1
  2. ...
  3. int array[NUMOFLETTERS];
  4.  

Código
  1. int const NUMOFLETTERS = 'z'-'a'+1
  2. ...
  3. int array[NUMOFLETTERS];
  4.  

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
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.    string abc= "abcdefghijklmnñopqrstuvwxy";
  9.    vector<int> conta(26);
  10.    string miCadena = "ejemplo de un tio que pregunta en un foro";
  11.  
  12.    for(int i=0;i < miCadena.size();i++)
  13.        for(int j=0;j < abc.size();j++)
  14.            if(miCadena[i] == abc[j]) conta[j]++;
  15.  
  16.  
  17.    for(int k=0;k < conta.size();k++)
  18.        cout << "Letra " << abc[k] << " aparece " << conta[k] << " veces." << endl;
  19.    return 0;
  20. }
  21.  

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 Desconectado

Mensajes: 10


Ver Perfil
Re: Contar caracters
« Respuesta #5 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>
#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 Desconectado

Mensajes: 7



Ver Perfil
Re: Contar caracters
« Respuesta #6 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>
#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 Desconectado

Mensajes: 10


Ver Perfil
Re: Contar caracters
« Respuesta #7 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..
« Última modificación: 10 Marzo 2012, 21:46 pm por kokokoko » En línea

Sagrini

Desconectado Desconectado

Mensajes: 107


Ver Perfil WWW
Re: Contar caracters
« Respuesta #8 en: 10 Marzo 2012, 21:56 pm »

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. { char buffer [32], letra; int i=0, cont=0;
  6. printf ("Cadena: "); read (0, buffer, 32); for (i=0; buffer[i] != '\0' && buffer[i] != '\n' && i!=32; i++); buffer [i]='\0';
  7. printf ("Letra: "); read (0, &letra, 1);
  8. for (i=0; i<strlen (buffer); i++) if (buffer[i]==letra) cont++;
  9. printf ("La letra %c aparace %d veces\n", letra, cont); return 0;
  10. }
  11.  
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Contar caracters
« Respuesta #9 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 >.<

Y también me gustaría aconsejar usar la directiva define o declarar variables constantes para asignar identificadores:

Código
  1. #define NUMOFLETTERS 'z'-'a'+1
  2. ...
  3. int array[NUMOFLETTERS];
  4.  
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
  1. 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
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Contar variables
PHP
Riki_89D 6 3,401 Último mensaje 11 Marzo 2009, 13:44 pm
por eLank0
contar caracteres
Scripting
minette1988 3 16,389 Último mensaje 13 Mayo 2010, 23:31 pm
por leogtz
Caracters raros :S Keylogger
.NET (C#, VB.NET, ASP)
BrokerJoker 0 1,999 Último mensaje 11 Enero 2012, 09:33 am
por BrokerJoker
Los caracters y letras de un keylogguer -.-''
.NET (C#, VB.NET, ASP)
BrokerJoker 7 5,077 Último mensaje 11 Abril 2012, 14:58 pm
por Maurice_Lupin
Contar registros
.NET (C#, VB.NET, ASP)
celino 6 5,239 Último mensaje 30 Abril 2012, 15:58 pm
por $Edu$
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines