Article 7 of alt.sources:
Path: mit-eddie!husc6!ncsuvx!lll-winken!ohlone!lll-tis!ptsfa!jmc
From:
[email protected] (Jerry Carlin)
Newsgroups: alt.sources
Subject: Soundex
Date: 9 Jul 87 21:02:16 GMT
Here is a short program I wrote a few years ago illustrating the use
of the "soundex" algorithm. It is used to generate the same token for
similarly pronounced names (like Smith and Smythe).
/* soundex algorithm from 1918 patent */
#include <stdio.h>
#include <ctype.h>
#define MAXNAME 30 /* max name length */
#define SOUNDLEN 6 /* max len soundex string */
main(argc,argv)
int argc;
char *argv[];
{
char name[MAXNAME]; /* input string for surname */
char sound[SOUNDLEN]; /* SOUNDLEN -1 length */
int namelen; /* length of entered name */
int i;
if (argc > 1)
{
for (i = 1; i < argc; i++)
{
getsound(argv[i],sound);
printf("%s\n",sound);
}
exit(0);
}
gets(name);
if (name[0] == '\0')
exit(0);
getsound(name,sound);
printf("%s\n",sound);
exit(0);
}
/***************************************************************************/
/* soundex algorhithm - format of result is annnn */
/***************************************************************************/
getsound(name,sound)
char *name;
char *sound;
{
int i;
int j;
int val; /* char value */
int oldval;
char tempc;
int namelen;
namelen = strlen(name);
j = 1; /* start 2nd pos */
oldval = 0;
tempc = name[0];
sound[0] = isupper(tempc) ? tolower(tempc) : tempc;
for (i = 1; (i <= namelen) && (j < SOUNDLEN - 1); i++)
{
tempc = name[i];
if (isupper(tempc))
tempc = tolower(tempc);
switch (tempc)
{
case 'b':
case 'f':
case 'p':
case 'v':
val = 1;
break;
case 'c':
case 'g':
case 'j':
case 'k':
case 'q':
case 's':
case 'x':
case 'z':
val = 2;
break;
case 'd':
case 't':
val = 3;
break;
case 'l':
val = 4;
break;
case 'm':
case 'n':
val = 5;
break;
case 'r':
val = 6;
break;
default:
val = 0;
break;
}
if (val != 0 && val != oldval)
sound[j++] = val + '0';
oldval = val;
}
while (j < SOUNDLEN-1)
sound[j++] = '0';
sound[SOUNDLEN] = '\0';
}
--
voice: (415) 823-2441 uucp: {ihnp4,lll-crg,ames,qantel,pyramid}!ptsfa!jmc
Where am I? In the village. Whose side are you on? That would be telling.