Autor Tema: Contar palabras con 'x' letra en un array con C++ (cplusplus)  (Leído 7655 veces)

vite0150

  • Visitante
ocupo buscar todas las veces que aparece cada letra del alfabeto... por lo que pense que seria bueno ir guardando el acum2 en un array antes de cambiar a la siguiente letra... pero no me esta saliendo bien, en este caso me esta dando el numero 34 repetido... He intentado cambiar de posicion las llaves, pero no logro conseguir que funcione...
De casualidad alguien sabe donde esta el error?

Código: [Seleccionar]
string diccionario[100]={"casa", "perro", "carro", "computadora", "cabana", "coche", "mer", "sfefef"};
int vec[27];
int acum1=0, acum2=0;
for(char a='a';a<='z';a++) {
acum2=0;
for(int b=0;b<8;b++){
acum1=0; //aqui reinicio el acumulador para que no me lleve la cuenta de las otras palabras
for(int c=0;c<diccionario[b].length();c++){
if(diccionario[b][c]==a) //aqui recorro cada letra de cada palabra en busca de la letra que sea segun el primer for (de la 'a' a la 'z')
acum1++;}
if(acum1>0)
acum2++; //este acumulador es porque no ocupo las veces que se repite la letra sino el numero de palabras donde esta presente esa letra
for(int i=0;i<27;i++)
vec[i]=acum2;}} //aqui intento meter acum2 en un nuevo array para luego mostrar el numero de palabras en las que esta cada letra... pero esta parte en especifico es la que no funciona

for(int i=0;i<27;i++)
cout<<vec[i]<<endl;
« Última modificación: 11 de Mayo 2015, 19:05 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Contar palabras con 'x' letra en un array
« Respuesta #1 en: 07 de Junio 2014, 09:14 »
Hola, es importante que indiques el lenguaje y compilador que estás utilizando para poder ayudarte. Aparentemente diría que es C++, pero facilita las cosas el dar esa información  :D

También sería necesario que pongas el código de forma que sea compilable, parace que lo que has incluido es un fragmento de un código más amplio. Si se puede compilar también facilita las cosas  :D

Saludos

vite0150

  • Visitante
Re:Contar palabras con 'x' letra en un array
« Respuesta #2 en: 07 de Junio 2014, 18:40 »
Asi es, es c++... En clase usamos Visual studio 2012
Ademas despues de saber cuantas veces se repite 'x' letra en "diccionario" debo aplicar esta formula:-n/N * ( log (n/N) / log (2.0) )
Donde n=numero de palabras donde aparece la letra y N=numero total de palabras... Y luego de hacer esa formula debo decir cual de las letras es la que dio mayor resultado.
Pero bueno, todo paso a paso primero si me ayudas a decifrar porque no me esta guardando acum2 correctamente en el array... Gracias por la ayuda

Código: [Seleccionar]
#include<iostream>
#include<sstream>
#include<string>
using namespace std;

int main(){
string diccionario[]={"casa", "perro", "carro", "computadora", "cabana", "coche", "mer", "sfefef"};
   int vec[27];
   int acum1=0, acum2=0;


   for(char a='a';a<='z';a++){
      acum2=0;
      for(int b=0;b<8;b++){
         acum1=0;
         for(int c=0;c<diccionario[b].length();c++){
            if(diccionario[b][c]==a)
               acum1++;}
         if(acum1>0)
            acum2++;}
      for(int i=0;i<27;i++)
         vec[i]=acum2;
     }
   for(int i=0;i<27;i++)
      cout<<vec[i]<<endl;

system("pause");
return 0;
}
« Última modificación: 07 de Junio 2014, 19:09 por vite0150 »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Contar palabras con 'x' letra en un array
« Respuesta #3 en: 08 de Junio 2014, 14:52 »
Tienes que tener cuidado con la lógica que utilizas y con los índices, contadores y acumuladores que utilizas.

He reestructurado el código (te lo pego a continuación) y a mí me está funcionando, pruébalo a ver si te funciona.

Código: [Seleccionar]
#include<iostream>
#include<sstream>
#include<string>
using namespace std;

int main() {
//string diccionario[]={"casa", "perro", "carro", "computadora", "cabana", "coche", "mer", "sfefef"};
    string diccionario[]= {"casa", "perro", "carro"};
    int contador = 0;
    int vec[27] = {0};
    int acum1=0;

    for(char a='a'; a<='z'; a++) {
        cout<<"LETRA ANALIZANDO: "<<a<<endl;
        for(int b=0; b<3; b++) {
            acum1=0;
            cout<<"Palabra analizando: "<<diccionario[b]<<endl;
            for(int c=0; c<diccionario[b].length(); c++) {
                if(diccionario[b][c]==a) {
                    acum1++;
                }
            }
            vec[contador]=vec[contador]+acum1;
            cout<<"Encontrada la letra: "<<acum1<<" veces en la palabra"<<endl;
        }
        cout<<"Encontrada la letra: "<<vec[contador]<<" veces en todas las palabras "<<endl;
        contador = contador+1;
    }
    for(int i=0; i<27; i++)
        cout<<vec[i]<<endl;

//system("pause");
    return 0;
}

Se usa un único acumulador: acum1, que va contando las veces que aparece una letra en todas las palabras y finalmente se guarda el número de apariciones en el vector vec.

Saludos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".