Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Controlla se un testo è italiano
Forum - C/C++ - Controlla se un testo è italiano

Avatar
cripto_419 (Normal User)
Newbie


Messaggi: 1
Iscritto: 08/02/2012

Segnala al moderatore
Postato alle 12:00
Mercoledì, 08/02/2012
Salve a tutti! ho fatto un codice che verifica se un testo contiene parole italiane. Il programma prende in input un file e si avvale di un altro file di testo (dizionario.txt) dove ho messo le parole italiane più frequenti. Con una strcmp verifico quante parole italiane sono presenti e ne traggo le conclusioni. Ora il mio problema è che nonostante metto in input un testo italiano non riconosce la presenza di parole italiane! Riuscite a trovare cosa c'è che non va?
Codice sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. int italiano(char *n_file);
  6. int main(void)
  7. {
  8.         char *nome_file1;
  9.         nome_file1=malloc(50*sizeof(char));
  10.                
  11.         printf("Inserisci il nome del file\n");
  12.         scanf("%s", nome_file1);
  13.        
  14.         if(italiano(nome_file1))
  15.                 printf("il testo e' italiano!");
  16.         else
  17.                 printf("il testo non e' italiano!");
  18.                
  19.         return 0;
  20. }
  21.  
  22. int italiano(char *n_file)
  23.   {
  24.         FILE *g, *f;
  25.        
  26.         f=fopen(n_file, "r");
  27.         g=fopen("C:\\dizionario.txt", "r");
  28.        
  29.         char *parola=malloc(25*sizeof(char));
  30.     char *str=malloc(25*sizeof(char));
  31.         int ita=0;
  32.        
  33.         while((fscanf(f, "%s", str))!=EOF)  {
  34.                 while((fscanf(g, "%s", parola))!=EOF)
  35.                   if(strcmp(str, parola)==0)
  36.                         ita++;  }
  37.        
  38.         fclose(g);  fclose(f);
  39.  
  40.         printf("%d\n", ita);
  41.        
  42.         if(ita>5)
  43.           return 1;
  44.         else
  45.           return 0;
  46.  
  47.   }


PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Up
2
Down
V
Segnala al moderatore
Postato alle 13:14
Mercoledì, 08/02/2012
Il secondo while esplora una volta il file ma già dalla seconda non lo fa più perché il puntatore è alla fine ...

Grazie mille! ci ho aggiunto una rewind e ho risolto.. - cripto_419 - 08/02/12 13:40


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 12:07
Mercoledì, 08/02/2012
è meglio che lavori sulle frequenze delle lettere:

http://it.wikipedia.org/wiki/Analisi_delle_frequenze

si so che esiste quel metodo, ma nel mio caso devo usare questo per vari motivi.. - cripto_419 - 08/02/12 12:19
me ne diresti due di questi "vari motivi"? - HeDo - 08/02/12 13:07
devo usare questa funzione all'interno di uun programma di cecifrazione dei cifrari di cesare e quindi per ognuna delle 26 chiavi possibili verifico se il testo è italiano.. Il metodo delle frequenze credo sia più dispendioso in questo caso. è ottimo invece per altri cifrari.. O almeno credo.. - cripto_419 - 08/02/12 13:25
e invece ti sbagli :) è proprio l'analisi delle frequenze che polverizza il cifrario di cesare! senza tentare 26 volte basta fare una sola volta l'analisi e confrontare il profilo delle frequenze con quello della lingua italiana, in questo modo calcoli lo spiazzamento delle lettere :) - HeDo - 08/02/12 19:32
eh si hai ragione! mi sembra più difficile però da implementare, sarà che non sono granchè esperta :) comunque proverò anche con questo metodo.. grazie del consiglio! - cripto_419 - 08/02/12 23:46


Ingegnere Informatico
https://ldlagency.it
PM