ciao amici,
mi trovo a scrivere un programma per il calcolo della distanza con l'algoritmo di levenshtein, questo il codice:
codice:
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <iostream.h>
#include <stdio.h>
int levenshtein_distance(char *s,char *t);
int minimo(int a,int b,int c);
/* funzione di levenshtein */
int levenshtein_distance(char *s,char *t)
{
/* definizione delle variabili */
int k;
int i;
int j;
int n;
int m;
int cost;
int *d;
int distance;
/* inserisco in n e m il valore della lunghezza delle stringhe s e t */
n=strlen(s);
m=strlen(t);
if(n!=0 && m!=0)
{
/* alloco la memoria per una matrice di dimensione (m*n) */
d = malloc((sizeof(int))*(m+1)*(n+1));
m = m+1;
n = n+1;
/* inizializzo la matrice */
for(k=0;k<n;k++)
d[k]=k;
for(k=0;k<m;k++)
d[k*n]=k;
/* faccio i confronti con le due stringhe */
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
/* se il carattere di STRINGA1 è uguale al carattere di STRINGA 2 */
/* allora COSTO = 0, altrimenti lo incremento e COSTO = 1 */
if(s[i-1]==t[j-1])
cost=0;
else
cost=1;
/* calcola la distanza */
d[j*n+i]=minimo(d[(j-1)*n+i]+1,d[j*n+i-1]+1,d[(j-1)*n+i-1]+cost);
}
/* assegna la distanza a distance */
distance=d[n*m-1];
/* ripulisce la matrice d */
free(d);
/* ritorna il valore distanza */
return distance;
}
else
return -1;
}
int minimo(int a,int b,int c)
/* funzione che calcola il minimo di 3 valori */
{
int min=a;
if(b<min)
min=b;
if(c<min)
min=c;
return min;
}
int main ()
{
char stringa1;
char stringa2;
cout << "INSERIRE LE STRINGHE: \n" << gets(stringa1), gets(stringa2);
cout << "LA DISTANZA VALE: " << levenshtein_distance(stringa1,stringa2) <<
endl;
return 0;
}
ottengo però errori di compilazione, in particolare quando esplicito d, la matrice, il compilatore se ne esce con:
cannot convert from 'void *' to 'int *'
ed altri problemi di conversione li ho nel main, al gets
gets' : cannot convert parameter 1 from 'char' to 'char *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
sapete per cortesia darmi una mano?
grazie