Contar y comparar palabras en lenguaje c

Iniciado por martha71404, 20 Octubre 2015, 22:37 PM

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

martha71404

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...


engel lex

que llevas hecho? que no sabes?... el foro es para resolver dudas puntuales, di exactamente cuales son tus dudas y recuerda googlear de antemano
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

furciorifa

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.

martha71404

y en codigo c como seria no se nada de programacion estoy aprendiedo :( ayudenme pls

do-while

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.
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Gunhack

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
Código (cpp) [Seleccionar]
#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;
}

martha71404

y ese mismo codigo sirve para implementarlo en la herramienta de flex??