contar letras de un texto

Iniciado por ALONSOQ, 2 Julio 2012, 12:27 PM

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

ALONSOQ

Hola,

Estoy tratando de hacer lo siguiente: introducir un texto, que lo convierta en minúsculas todo y que diga las veces que aparece cada letra

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
main()
{
char cadena[255];
char aux[255];
int i,j, tamano;
int a=0;
printf ("dime una palabra:");
gets(cadena);
tamano=strlen(cadena);
for (i=0;i<tamano;i++)
{
    for (j=0;j<255;j++)
    {
    if (cadena[i]=j)
   a++;
    }
   
    printf("%d\t",aux[a]);
}   
    getch();     
}


0xDani

Si le pones etiquetas de codigo lo leo.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

DickGumshoe

#2
En el texto no te sale la dimensión de algunos arrays porque querías poner, por ejemplo:

Variable[i]

Y el código

[i]

Es para poner en cursiva un texto. Para solucionarlo, ponlo entre etiquetas GeSHi como ha dicho ya daniyo, y entonces, lo leeremos.

Saludos.

ALONSOQ

Lo siento pero no tengo ni idea de que son esas etiquetas

un saludo

DickGumshoe

#4
Dale a editar mensaje, seleccionas el código, y arriba a la derecha (donde está para poner negrita, subrayado...),. hay un cuadro en el que pone "GeSHi", pulsas, buscas C y ya.

La etiqueta de code=c ponla al principio del código, y la de /code ponla al final

ALONSOQ


DickGumshoe

A mí se me ocurre lo siguiente:

Podrías crear una cadena auxiliar, en la que copiaras el contenido de la cadena de caracteres que quieres contar el número de veces que aparece cada letra.

Con un bucle for anidado, vas comprobando el primer carácter con todos los demás de la cadena, y en caso de coincidir, aumentas el el contador de dicha letra en uno. Además, si coinciden, sustituyes en la cadena auxiliar dicho carácter por un espacio, para que cuando el bucle for llegue a dicho carácter no tengas que contar letras.

Espero haberme expresado bien...

Saludos.

0xDani

Para empezar no necesitas conio.h.
Despues, ¿tiene que decirte las veces que aparece cada letra del abecedario o las veces que aparece una determinada letra?
Te dejo esto:

#include <string.h>
#include <ctype.h>
#include <stdio.h>

int main(){
char cadena[256];
char letra;
printf("Introduce una cadena:\t");
gets(cadena);
int tamano=strlen(cadena);
for(int i=0; i<tamano; i++){
  cadena[i]=tolower(cadena[i]);
}
printf("Las letras de su cadena son:")//aqui no se que quieres hacer
printf("¿Que letra quiere contar?");
gets(letra);
int count=0;
for(j=0; j<tamano; j++){
  if(strcmp(cadena[j], letra)==0)count++;
}
printf("La letra aparece %i veces", count);
return 0;
}


Saludos, espero que te sirva.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

DickGumshoe

#8
Daniyo, unas aclaraciones. En C, cuando es sólo un carácter, no se puede pedir con gets, hay que utilizar scanf.

Además, para comparar dos caracteres, no se usa la función strcmp, sino como si compararas dos números.

También creo que se refiere el enunciado a que cuentes todos los caracteres de la cadena, no solo uno que le pida el usuario.

Te dejo el código de daniyo corregido, AlonsoQ. En caso de que sea contando todos los caracteres de la cadena, prueba a mirar lo que te dije en mi último mensaje, y si tienes alguna duda, pregunta y te intento ayudar a hacer el código.


#include <string.h>
#include <ctype.h>
#include <stdio.h>

int main(){
char cadena[256];
char letra;
int i;
printf("Introduce una cadena:\t");
gets(cadena);
int tamano=strlen(cadena);
for( i=0; i<tamano; i++){
 cadena[i]=tolower(cadena[i]);
}

printf("¿Que letra quiere contar?");
scanf("%c", &letra);
int count=0;
for(j=0; j<tamano; j++){
 if(cadena[j] == letra) count++;
}
printf("La letra aparece %d veces", count);
return 0;
}




Edito:

Por cierto, AlonsoQ, te recomiendo inicializar todas las variables justo después de "int main(){", y no esparcidas por todo el código. Ahora mismo no pasa nada, porque son códigos sencillos, pero mejor que te vayas acostumbrando para cuando trabajes con programas más complejos.

0xDani

Gracias, DickGumshoe, es que tu sabes que soy de C++, y no  sabia muy bien como iban gets y scanf. De todas formas no tenia muy claro que era lo que queria hacer, y le he dejado un pequeño codigo improvisado para que lo modifique y haga lo que quiera.
Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM