Autor
|
Tema: Ocurrencia de palabras en c++!! (Leído 7,714 veces)
|
Norberto2.0
Desconectado
Mensajes: 6
|
He intentado de mil formas hacerlo, pero no me sale, soy principiante; 1. Permitir que el usuario especifique el nombre del archivo a analizar en una línea de comando. 2. Si no ingresa un nombre de archivo, los datos se tomaran de la entrada estándar (cin), terminando el texto con una línea que contenga sólo el carácter 0. 3. La salida debe contener las palabras y su frecuencia de aparición, una palabra por línea y en orden descendente. Requerimientos de implementación detallados 1. Lea las palabras y almacénelas en una variable de tipo string utilizando el operador de entrada estándar (<<). 2. Use operaciones de la clase string y funciones de ctype para convertir todas las palabras a letras minúsculas y separar caracteres de puntuación de las mismas. 3. Defina una clase Tabla, que contenga un arreglo, cuyas componentes incluyan cada palabra y su frecuencia de aparición. Defina como una constante el tamaño máximo del arreglo (por ejemplo 1000). 4. La clase Tabla debe contener al menos las siguientes funciones: a) void agrega(string pal), agrega pal al arreglo si su primera aparación e inicializa la frecuencia en 1. Si no, si ya existe pal en el arreglo, incrementa su frecuencia en 1 b) void ordena(void), ordena el arreglo de acuerdo a la componente frecuencia. a map container to accumulate the frequency counts for each word. The word can be used as the key. c) void despliega(void), imprime en la salida estándar el arreglo ordenado, graficando la frecuencia de aparición de cada palabra.
es mas el main, y los metodos que me cuestan, necesito hacer un inventario, pero con este programa simplificaria bastante mi proyecto. gracias
|
|
|
En línea
|
|
|
|
ssaammuu
|
Vas a tener que enseñar el código que has intentando crear y/o que partes no puedes hacer porque nadie va a crear el programa entero por ti.
|
|
|
En línea
|
|
|
|
Norberto2.0
Desconectado
Mensajes: 6
|
este es mi archivo tabla.h, debo implementar los metodos, pero cuando lo hago me itra un error en la linea del tabla.cpp; #include "tabla.h"
#ifndef TABLA_H #define TABLA #include <iostream> #include <fstream> #include <cstdlib> #include <string>
using namespace std;
class Tabla { private: const int max = 100; string miarreglo[][] = new String [max,2]; public: void agrega(string pal); // agrega pal al arreglo e inicializa su frecuencia en 1, si ya esta pal, aumenta la frecuencia en 1. void ordena(void); // ordena el arreglo de acuerdo a su frecuencia(una variable puede guardar la frecuencia de la palabra, siendo la palabra su clave) void despliega(void);//imprime en la salida estándar el arreglo ordenado, graficando la frecuencia de aparición de cada palabra.
}; #endif
|
|
|
En línea
|
|
|
|
ssaammuu
|
const int max = 100; string miarreglo[][] = new String [max,2];
No puedes asignarles el valor en la cabecera. Eso debes hacerlo en tabla.cpp A lo mejor te conviene definir max fuera de la clase y tener string miarreglo[max][2]; También te estás olvidando del constructor y destructor, si quieres crear objetos de la clase vas a necesitarlos.
|
|
« Última modificación: 3 Mayo 2011, 21:51 pm por ssaammuu »
|
En línea
|
|
|
|
Norberto2.0
Desconectado
Mensajes: 6
|
ya cree el constructor =) pero me sigue tirando error en el tabla.cpp en la linea de #include "tabla.h"
|
|
|
En línea
|
|
|
|
Norberto2.0
Desconectado
Mensajes: 6
|
eso hice ahora =) #ifndef TABLA_H #define TABLA #include <iostream> #include <fstream> #include <cstdlib> #include <string>
using namespace std; const int max = 100;
class Tabla { private: string miarreglo[max][2]; public: Tabla(void){ for (int i=0;i<100;i++){ miarreglo[][] = ["",0]; } void agrega(string); // agrega pal al arreglo e inicializa su frecuencia en 1, si ya esta pal, aumenta la frecuencia en 1. void ordena(void); // ordena el arreglo de acuerdo a su frecuencia(una variable puede guardar la frecuencia de la palabra, siendo la palabra su clave) void despliega(void);//imprime en la salida estándar el arreglo ordenado, graficando la frecuencia de aparición de cada palabra.
}; #endif
|
|
|
En línea
|
|
|
|
ssaammuu
|
Primero que te falta un } En C/C++ Esto no lo puedes hacer En todo caso: for (int i=0;i<100;i++){ miarreglo[i][0] = ""; miarreglo[i][1] = ""; }
|
|
|
En línea
|
|
|
|
Norberto2.0
Desconectado
Mensajes: 6
|
gracias.. en el metodo agregar void Tabla::agrega(string pal){ for (int j=0; j<max; j++){ if(miarreglo[j][j]==pal){ miarreglo[j][j]= miarreglo(j,1); } else{ aqui como agrego pal?} } }
eso es correcto?
|
|
|
En línea
|
|
|
|
ssaammuu
|
No se lo que intentas hacer pero de momento te puedo decir que no es correcto por la sintaxis. miarreglo[j][j]= miarreglo(j,1); Me parece que tu lo que quieres es un arreglo de palabras con su respectivo número de apariciones. Si es eso vas a tener que declarar una estructura y despues tener una pila de esa estructura o mejor aun, un vector. struct sPalabra{ string palabra; int numero; };
class Tabla { private: vector<sPalabra> misPalabras;
public: void agrega(string); // agrega pal al arreglo e inicializa su frecuencia en 1, si ya esta pal, aumenta la frecuencia en 1. void ordena(void); // ordena el arreglo de acuerdo a su frecuencia(una variable puede guardar la frecuencia de la palabra, siendo la palabra su clave) void despliega(void);//imprime en la salida estándar el arreglo ordenado, graficando la frecuencia de aparición de cada palabra.
};
Puedes agregar de esta manera void Tabla::agrega(string palabra){ //comprobamos todas las palabras y si se encuentra incrementa el numero for (int i=0;i<misPalabras.size();i++){ if (misPalabras[i].palabra==palabra){ misPalabras[i].numero++; return; } } //si no la agregamos misPalabras.push_back(sPalabra{palabra,1}); };
Pero, la verdad es que por la forma de intentar declarar arreglos, tendrías que aprender lo básico antes de saltar a las clases ya que si no te va a costar mucho avanzar.
|
|
|
En línea
|
|
|
|
|
|