Hola Buanas tardes intento hacer un programa en donde quiero que comprare las palabras
y cuando este encuentre una palabra repetida la imprima y que le sume 1 y si encuentra otra que sea 2 etc..
ejemplo
hola hola mundo
respuesta
Palabras repetidas 2
solo quiero que me imprima el numero de veces que se repite cada palabra desde un archivo.txt
espero y me ayuden saludos...
que llevas hecho? que no sabes?... el foro es para resolver dudas puntuales, di exactamente cuales son tus dudas y recuerda googlear de antemano
Puedes usar la librería String.h, y usar strtok(); para separar las palabras de un texto y después almacenarlas en un arreglo que vaya checando la primer palabra con la siguiente con strcmp(); y si son iguales marca en el contador repetidas++, si no ignora en las comparaciones y después si repetidas==0 pones no hay palabras repetidas, listo ya te di el algoritmo básicamente.
y en codigo c como seria no se nada de programacion estoy aprendiedo :( ayudenme pls
No te preocupes, yo te ayudo, construye un árbol binario que almacene como campo clave una palabra en orden alfabético, y un segundo campo que controle las repeticiones.
¡Saludos!
PD: Si me he pasado con la ayuda lo siento, no era mi intención resolver el problema.
Este es el código, solo le hace falta lo de cargar el archivo a la cadena pero eso te lo dejo a ti ;D
#include <cstdio>
#include <cstring>
#include <ctype.h>
using namespace std;
int toLower(char *cadena); //Funcion que convierte toda la cadena a minúsculas y regresa el numero de palabras.
int main() {
//Se crea la variable cadena tu puedes modificar el programa para que se cargue la cadena desde el archivo.
char cadena[] = {"Hola hola mundo, este programa cuenta cuantas palabras hay en esta cadena."};
char aux[strlen(cadena)]; //Variable auxiliar para mantener la cadena original.
strcpy(aux, cadena); //Copiamos el contenido de la cadena original a la cadena auxiliar.
int nPalabras = toLower(aux); // Variable que almacena el numero total de palabras en la cadena.
char tokens[nPalabras][30]; //Variable que almacena cada palabra en un espacio del arreglo.
char *token = strtok(aux, " ,.!?"); //Función que convierte una cadena a tokens.
nPalabras = 0;
while(token != NULL) {
strcpy(tokens[nPalabras++], token); //Se almacena cada token (palabra) en un espacio del arreglo.
token = strtok(NULL, " ,.-!?");
}
int contPal[nPalabras]; //Variable que contiene el numero de repeticiones de cada palabra.
int palRep = 0; //Variable auxiliar para ingresar al indice de "contPal".
int suma = 0;
for(int i = 0; i <nPalabras; i++) {
contPal[i] = 0;
}
for(int i = 0; i < nPalabras - 1; i++) { //Ciclo que compara si una palabra es igual a otra en los tokens.
for(int j = i+1; j < nPalabras ; j++) {
if(strcmp(tokens[i], tokens[j]) == 0 && strcmp(tokens[i], "*") != 0){
strcpy(tokens[j],"*"); //Si una palabra es igual a otra dentro de la cadena cambia su valor a "*" para o ser tomada en cuenta la siguiente iteración.
contPal[palRep]++;
}
}
if(strcmp(tokens[i], "*") != 0) { //Se saca la suma de las palabras repetidas.
suma += contPal[palRep];
palRep++;
}
}
palRep = 0;
printf("%s\n\n", cadena);
printf("Las palabras repetidas son:\n\n");
for(int i = 0; i <nPalabras; i++) { // Muestra la palabra y su numero de repeticiones
if(strcmp(tokens[i], "*") != 0 && contPal[palRep] != 0 ) {
printf("%d) %s: %d Coincidencia(s).\n", palRep, tokens[i], contPal[palRep++]);
}
}
printf("\nTotal de palabras repetidas: %d\n\n", suma);
}
int toLower(char *cadena) {
int n = 0;
for(int i = 0; i < strlen(cadena); i++) {
cadena[i] = tolower(cadena[i]);
if(cadena[i] == ' ') {
n++;
}
}
return n+1;
}
y ese mismo codigo sirve para implementarlo en la herramienta de flex??