Leer palabras de un texto

Blanca Simón.

/*Este programa necesita tener creado el fichero TEXTO.TXT*/

#include <stdio.h>
#include <stdlib.h>
#include <conio_mingw.h>
#include <ctype.h>
#include <string.h>
#define MAXLONGITUD 100
#define MAXPALABRAS 1000
#define FICHERO “texto.txt”
#define FICHRESULT “result.txt”
//VARIABLES Y REGISTROS
struct palabra{               /* estructuras donde se almacenan las diferentes palabras */
char cadena[MAXLONGITUD];
int contador;
} PALABRAS[1000];

char word[MAXLONGITUD];

//CABECERA DE LAS FUNCIONES
int getword(char *,FILE *);

int longitudcadena(char word[MAXLONGITUD]);
int comparacadenas(char word1[MAXLONGITUD],char word2[MAXLONGITUD]);

/*PROGRAMA PRINCIPAL*/

int main(void)
{
//variables locales
FILE *pf,*pwf;  /*puntero a fichero*/
char c3;   /*caracter para leer del fichero*/
int i=1;   /*Contador para manejar la última posición del registro*/
int j=0;   /*Contador para recorrer el registro*/

system(“cls”);   /*Limpia pantalla*/
printf(” Este programa lee el fichero ‘texto.txt’ y \n”);
printf(” calcula las veces que se repite cada palabra.\n”);
printf(” (Termina cuando es final de fichero.): \n\n”);
printf(“El contenido del fichero es: (pulsa el espaciador)\n\n”);
getch();       /*lee un caracter de stdin=TECLADO*/

/* LO QUE VAMOS A HACER ES LEER TODAS LAS PALABRAS
DEL FICHERO Y PONERLAS EN  PANTALLA*/

pf=fopen(FICHERO,”r”);      /*ASOCIAMOS texto.txt puntero a fichero para lectura*/
while (c3!=EOF)             /* lectura del contenido del fichero, mientras no sea el final del fichero */
{
c3=getc(pf);
putc(c3,stdout);
}
fclose(pf);
printf(“\n\n”);
/* LO QUE VAMOS A VOLVER A LEER DE NUEVO LAS PALABRAS
DEL FICHERO Y PONERLAS EN  PANTALLA*/

pf=fopen(FICHERO,”r”);      /* deteccion de las diferentes palabras en el fichero */

printf(“\n Las palabras que hay son: (sigue pulsando el espaciador)\n”);
getch();                    /*lee un caracter de stdin*/
//1ªPALABRA
if (getword(word,pf)!=EOF)
{strcpy(PALABRAS[0].cadena,word);
PALABRAS[0].contador=1;
};
printf(“%s\n”,word);
i=1;

//SIGUIENTES PALABRAS
while (getword(word,pf)!=EOF)       /* word=puntero palabra ,pf=puntero a fichero*/
{                              /*Si hay almenos una palabra entra*/
for (j=0;j<i;j++)
{
if (comparacadenas(PALABRAS[j].cadena,word))
{ PALABRAS[j].contador++;
break;
}
}
if(j==i)
{ strcpy(PALABRAS[i].cadena,word);
PALABRAS[i].contador=1;
i++;
}

getch();
printf(“%s\n”,word);

}//Fin del while
printf(“\n\n”);
fclose(pf);

system(“cls”);
printf(“\n Las palabras que hay y su numero son:”);
printf(“\n (El resultado tambien se escribe en el fichero \”result.txt\” ;”);
printf(“\n  Sigue pulsando el espaciador) \n “);
getch();

pwf=fopen(FICHRESULT,”w”);     // escritura del resultado en fichero y por pantalla
for(j=0;j<i;j++)
{
printf(“\n%s – %d”,PALABRAS[j].cadena,PALABRAS[j].contador);
fprintf(pwf,”%s – %d\n”,PALABRAS[j].cadena,PALABRAS[j].contador);
getch();
}//fin del for
fclose(pwf);

printf(“\n\nRECUERDA QUE EL RESULTADO LO TIENES EN \”RESULT.TXT\” \n\n”);
system(“PAUSE”);
return 0;

}
/******** GETWORD( ) *******************/
/* FUNCION QUE DETECTA LAS DIFERENTES PALABRAS EN EL TEXTO */

int cw=0;
int getword(char *w,FILE *pf)
{
int c;
char c2;
static int cw;

/* ignora todo tipo de blancos */
/* si encuentra final de fichero se acaba la lectura */
if (cw==EOF) return cw;
while (!isalnum(c2=getc(pf)))
if (c2==EOF) return c2;

/* en este bucle acumula la palabra en la string *w */
*w++=c2;
while (isalnum(c2=getc(pf)))
*w++=c2;
/* final de cadena */
*w=0;
/*guarda el ultimo caracter en cw que es static */
cw=c2;
return 1;
}
/************************/
int longitudcadena(char word1[MAXLONGITUD])
{   int j=0;
while (word1[j]!=”) j++;  /* j es la long de la cadena*/
return j;
}

int comparacadenas(char word1[MAXLONGITUD],char word2[MAXLONGITUD])
{ int control=1; //Son distintas
int longi=0,i;

longi=longitudcadena(word1);

if (longitudcadena(word1)==longitudcadena(word2))
{ for (i=0;i<longi;i++)
if (word1[i]!=word2[i]) {control=0; break;}
}
else control=0;

return control;
}

Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

2 respuestas a Leer palabras de un texto

  1. Mónica dijo:

    Hola!

    Oye, en este punto:
    *w=”; –> Mi compliador no me acepta esas comillas… y no tengo muy claro qué significan ?? :S
    /*guarda el ultimo caracter en cw que es static */
    cw=c2;
    return 1;
    }
    /************************/
    int longitudcadena(char word1[MAXLONGITUD])
    { int j=0;
    while (word1[j]!=”) j++; /* j es la long de la cadena*/
    return j;
    }

    • Puedes usar alternativamente:

      *w=0; // caracter de Ascii cero, que indica final de cadena

      Usualmente se pone

      *w= ‘slash cero’

      pero el WordPress se come el slash y el cero y las comillas las cambia de formato,
      quedando aparentemente:

      *w= ”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s