contar letras de un texto

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

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

Flamer


ALONSOQ

Cita de: Flamer en  2 Julio 2012, 21:22 PM
hola ALONSOQ tengo años que no manejo c++, yo puro vb6 y no lo tengo instalado el c++ en mi pc pero tedejo este codigo aver si tesirve me base en el codigo que pusiero los demas compañeros:

char Caracter;
char Cadena[256];
int contador=0;

printf("Introduce la cadena...")
gets(Cadena);

int Cadena_largo=strlen(cadena);

for(int x=0;x<Cadena_largo;x++)
{
   Caracter=Cadena[x];
   for(int y=0;y<Cadena_largo;y++)
   {
       if (Cadena[y]==Caracter)
       {
          Contador++;
       }
   }
  printf("La Letra ",Caracter," Se Repitio ",Contador," veces...");
  Contador=0;
}
return 0;


corrijanme si estoy mal llaque no esta compilado.
y si es eso lo que quieres

saludos flamer

Gracias por tu aportación, esto es lo que llevo hecho, pero no funciona

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



Flamer

aaaaa lo que se me viene ala mente orita es que terrepite las letras contadas dime si estoy mal o en que te marca error para corregir si es que puedo por que como digo tengo muncho qu no programo en c++
saludos

BlackZeroX

Cita de: ALONSOQ en  2 Julio 2012, 23:22 PM
Podrías ponerlo en C; no entiendo nada.

Que lastima...

Dulces Lunas!¡.
The Dark Shadow is my passion.

do-while

#24
¡Buenas!

Aqui tienes el pseudocodigo:


cadena texto;
entero repeticiones[rango: 'a'..'z'] = {0...0},i=0

leer texto
minusculas(texto)

mientas texto[i] != 0

   si texto[i] es letra
       repeticiones[texto[i]] = repeticiones[texto[i]] + 1
   fin si

   i = i + 1

fin mientras


Asi tienes las veces que se repite cada letra en el texto introducido.

Ahora solo tienes que adaptarlo a C.

¡Saludos!

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

SXF

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

int main(){
char cadena[30];
char letra[30];
int count=0;
strcpy(cadena,"hola mundo hola");
strcpy(letra,"feo");
int sizecdn=strlen(cadena);
int sizecdn2=strlen(letra);


for(int k=0;k<sizecdn2;k++){
    for(int j=0; j<sizecdn; j++){
    if(cadena[j]==letra[k])count++;
    }
    printf("La letra %c aparece %d veces\n",letra[k], count);
    count=0;
}

scanf("%d");
return 0;
}



Aqui creo que lo tienes :).

BlackZeroX

#26
perdon el codigo en C++ era asi:

Código (cpp) [Seleccionar]



#include <iostream>
#include <algorithm>
#include <map>
#include <string>

using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::map;
using std::sort;

int main() {     // ==============
    string cadena;
    map<char, size_t> contador;
    register map<char, size_t>::iterator it;

    cout << "ingresa el texto: ";
    getline(cin, cadena);
    cout << endl;
    cout << "Longitud: " << cadena.length() << endl;

    for (register size_t i = 0; i < cadena.length(); i++) {
        contador[cadena[i]]++;
    }

    cout << "Caracter.\tRepeticiones." << endl;
    for (it = contador.begin(); it != contador.end(); ++it) {
         cout << (*it).first << "\t" << (*it).second << endl;
    }

    cin.get();  //  Pausamos

    return 0;
}



en C



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

inline size_t readLine(FILE *file, char **line) {
    size_t size = 0;

    (*line) = (char*)malloc(1);

    while (((*line)[size] = getchar()) != '\n')
        (*line) = (char*)realloc((*line), ++size + 1);

    (*line)[size] = '\0';

    return size;
}

int main() {     // ==============
    register size_t countChars[256];
    char *line;
    size_t size;

    memset(countChars, 0, 256 * sizeof(size_t));
    size = readLine(stdin, &line);

    if (!line)
    {
        fprintf(stderr, "No se pudo leer la linea del teclado.");
        return EXIT_FAILURE;
    }

    //  Contamos cada caracter.
    for (register size_t i = 0; i < size; i++)
        countChars[(int)(line[i])]++;

    for (register int i = 0; i < 256; i++)
    {
        if (countChars[i])
        {   //  Mopstramos solo las letras que se tenian en la frase.
            printf("%c (%d) = %d\n", (char)i, i, countChars[i]);  // caracter (ascii) = repetido
        }
    }

    free(line);
   
    getchar();

    return 0;
}



Dulces Lunas!¡.
The Dark Shadow is my passion.

ALONSOQ


ALONSOQ

Cita de: SXF en  3 Julio 2012, 02:09 AM
#include <string.h>
#include <ctype.h>
#include <stdio.h>

int main(){
char cadena[30];
char letra[30];
int count=0;
strcpy(cadena,"hola mundo hola");
strcpy(letra,"feo");
int sizecdn=strlen(cadena);
int sizecdn2=strlen(letra);


for(int k=0;k<sizecdn2;k++){
    for(int j=0; j<sizecdn; j++){
    if(cadena[j]==letra[k])count++;
    }
    printf("La letra %c aparece %d veces\n",letra[k], count);
    count=0;
}

scanf("%d");
return 0;
}



Aqui creo que lo tienes :).


Muchas gracias SXF,

A partir de tu codigo he desarrollado lo que me piden  ( para cualquier palabra) serí mucho pedirte que me volvieras a echar un cable, ya que si por ejemplo introduzco la palabra PEPE, el código me devuelve: la P aparece 2 veces, la E aparece 2 veces, la P aparece 2 veces, la E aparece 2 veces.

Me gustaría poder omitir las letras que ya han aparecido

muchas gracias por tu ayuda, me ha servido de mucho tu explicación. Te adjunto el código

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

int main(){
char palabra [30];   
char cadena[30];
char letra[30];

int count=0;
int tamano=0;

printf("dime una palabra:");
gets(palabra);
tamano=strlen(palabra);
for (int p=0;p<tamano;p++)
{
strcpy(cadena,palabra);
}
/*strcpy(letra,"hola");*/
int sizecdn=strlen(cadena);
/* int sizecdn2=strlen(letra);*/


for(int p=0;p<tamano;p++){
    for(int j=0; j<sizecdn; j++){
    if(cadena[j]==palabra[p])count++;
    }
    printf("La letra %c aparece %d veces\n",palabra[p], count);
    count=0;
}

scanf("%d");
return 0;
}


DickGumshoe

Como una de las variables "palabra" o "cadena" es auxiliar, en una de ellas, cada vez que encuentres una carácter que coincida, puedes sustituirlo por un espacio.

Saludos.