home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume17 / e2 / part01 / sp_dist.c < prev    next >
C/C++ Source or Header  |  1989-02-08  |  1KB  |  50 lines

  1. /*
  2.  * Stolen from "The UNIX Programming Environment" by Kernighan and Pike.
  3.  *
  4.  * Work out the distance between the strings 's' and 't' according
  5.  * to the rough metric that
  6.  *
  7.  *     Identical = 0
  8.  *     Interchanged characters = 1
  9.  *     Wrong character/extra character/missing character = 2
  10.  *     Forget it = 3
  11.  *
  12.  */
  13. int
  14. sp_dist(s, t)
  15. char *s;
  16. char *t;
  17. {
  18.  
  19.     while (*s++ == *t){
  20.         if (*t++ == '\0'){
  21.             /* identical */
  22.             return 0;
  23.         }
  24.     }
  25.  
  26.     if (*--s){
  27.         if (*t){
  28.             if (s[1]&&t[1]&&*s == t[1]&&*t == s[1]&&!strcmp(s+2, t+2)){
  29.                 /* Interchanged chars. */
  30.                 return 1;
  31.             }
  32.             if (!strcmp(s+1, t+1)){
  33.                 /* Wrong char. */
  34.                 return 2;
  35.             }
  36.         }
  37.         if (!strcmp(s+1, t)){
  38.             /* Extra char in 't'. */
  39.             return 2;
  40.         }
  41.     }
  42.     if (!strcmp(s, t+1)){
  43.         /* Extra char in 's'. */
  44.         return 2;
  45.     }
  46.  
  47.     /* Forget it. */
  48.     return 3;
  49. }
  50.