need help convert c code
D. Reeds
robot at noreply.com
Thu Jul 16 23:46:41 PDT 2009
Robert Fraser Wrote:
> D. Reeds wrote:
> > can anybody help me translate this c code into d, im using D1+tango combo. i'm new to D and got stucked on multi-dimension array part.
> >
> > int levenshtein_distance(char *s,char*t)
> > //Compute levenshtein distance between s and t
> > {
> > //Step 1
> > int k,i,j,n,m,cost,*d,distance;
> > n=strlen(s);
> > m=strlen(t);
> > if(n!=0&&m!=0)
> > {
> > d=malloc((sizeof(int))*(m+1)*(n+1));
> > m++;
> > n++;
> > //Step 2
> > for(k=0;k<n;k++)
> > d[k]=k;
> > for(k=0;k<m;k++)
> > d[k*n]=k;
> > //Step 3 and 4
> > for(i=1;i<n;i++)
> > for(j=1;j<m;j++)
> > {
> > //Step 5
> > if(s[i-1]==t[j-1])
> > cost=0;
> > else
> > cost=1;
> > //Step 6
> > d[j*n+i]=minimum(d[(j-1)*n+i]+1,d[j*n+i-1]+1,d[(j-1)*n+i-1]+cost);
> > }
> > distance=d[n*m-1];
> > free(d);
> > return distance;
> > }
> > else
> > return -1; //a negative return value means that one or both strings are empty.
> > }
> >
> > int minimum(int a,int b,int c)
> > //Gets the minimum of three values
> > {
> > int min=a;
> > if(b<min)
> > min=b;
> > if(c<min)
> > min=c;
> > return min;
> > }
> >
> > it is a levenshtein distance algorithm.
>
> Ummm... import tango.stdc.stdlib then copy & paste; that code should
> work the same in D as in C. The only changes you should need are:
>
> int k,i,j,n,m,cost,*d,distance;
>
> Which should be changed to:
>
> int k,i,j,n,m,cost,distance;
> int* d;
>
> And sizeof(int) -> int.sizeof
i just realized, this code uses c string and c string function therefor its not utf safe. i do need to convert it to D.
More information about the Digitalmars-d-learn
mailing list