PDA

Visualizza la versione completa : [C] stopwords tramite strtok


franzSPECIAL
20-08-2010, 10:08
Buongiorno!

Volevo creare un programma che:
-leggesse prima della compilazione delle parole (dette stop words)
-leggesse da tastiera una frase
-copiasse in "newfile" la frase privata dell stop words.

Tuttavia, sono riuscito a creare un programma che...copia in newfile le ultime parole della frase presa da tastiera.
Sicuramente ci sono dei metodi più sbrigativi per risolvere la faccenda, ma anche il mio programma sembra avere un senso e desidererei capire cos'è che non va in esso; perché non svolge i suoi compiti.



#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
FILE *newfptr;

char buff[100],*swptr[]={"il", "cane", "e", "il", "migliore", "amico", "dell" ,"uomo"},*tokptr;
int swfound=0,gowords=0,i,controller;

printf("Le stopwords sono:\n");
for(i=0;i<8;i++)
printf(" %s ",swptr[i]);

newfptr=fopen("newfile","w");


fgets(buff,sizeof(buff),stdin);
//legge una stringa fino al newline e la mette in buff



if((tokptr=strtok(buff," "))!=NULL) //se la funzione ha trovato il primo token

{


for(i=0;i<8;i++) //confronta il primo token con tutte le stopwords
{
if( (strncmp(tokptr,swptr[i],15))==0 ) //se ne hai trovata 1
swfound++;
//incrementa il contatore delle stopwords trovate
}



if(swfound<0) //altrimenti,copia in newfile


{
fprintf(newfptr,"%s ",tokptr);
++gowords;
}
}



while( (tokptr = strtok(NULL, " ")) != NULL ) //individua gli altri token della stringa
{

for(i=0;i<8;i++) //confronta il primo token con tutte le stopwords
{
controller=0;
if( (strncmp(tokptr,swptr[i],15))==0 ) //se ne hai trovata 1
{ ++swfound;
++controller; //incrementa il contatore delle stopwords trovate
}

}

if(controller<1) //altriment,i copia in newfile
{
fprintf(newfptr,"%s ",tokptr);
++gowords;

}
}



printf("totate sw trovate:%d;\ntot gw copiate:%d;\ntot parole lette:%d.\n",swfound,gowords,(swfound+gowords));
printf("Il file copiato e':\n");

return 0;
}

Loading