home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Audio Plus 10-94
/
AUDIOPLUS.ISO
/
msdos
/
misc
/
soundex1
/
soundex.c
next >
Wrap
Text File
|
1986-05-19
|
2KB
|
80 lines
/****************************************************************
* SOUNDEX ALGORITHM in C *
* *
* The basic Algorithm source is taken from EDN Nov. *
* 14, 1985 pg. 36. *
* *
* As a test Those in Illinois will find that the *
* first group of numbers in their drivers license *
* number is the soundex number for their last name. *
* *
* RHW PC-IBBS ID. #1230 *
* *
****************************************************************/
char (*soundex(out_pntr, in_pntr))
char *in_pntr;
char *out_pntr;
{
extern char get_scode();
char ch,last_ch;
int count = 0;
strcpy(out_pntr,"0000"); /* Pre-fill output string for */
/* error and trailing zeros. */
*out_pntr = toupper(*in_pntr); /* Copy first letter */
last_ch = get_scode(*in_pntr); /* code of the first letter */
/* for the first 'double-letter */
/* check. */
/* Loop on input letters until */
/* end of input (null) or output */
/* letter code count = 3 */
while( (ch = get_scode(*(++in_pntr)) ) && (count < 3) )
{
if( (ch != '0') && (ch != last_ch) ) /* if not skipped or double */
*(out_pntr+(++count)) = ch; /* letter, copy to output */
last_ch = ch; /* save code of last input letter for */
/* next double-letter check */
}
return(out_pntr); /* pointer to input string */
}
char get_scode(ch)
char ch;
{
/* ABCDEFGHIJKLMNOPQRSTUVWXYZ */
/* :::::::::::::::::::::::::: */
static char soundex_map[] = "01230120022455012623010202";
/* If alpha, map input letter to soundex code. If not, return 0 */
if( !isalpha(ch) ) /*error if not alpha */
return(0);
else
return(soundex_map[(toupper(ch) - 'A')] );
}
#include <ctype.h>
main(argc, argv)
int argc;
char *argv[];
{
char *code[10];
int i;
if(argc == 1) /* No arguments, give usage */
{
printf("\nUsage: soundex (name) (...)\n");
exit(1);
}
for(i = 1; i < argc; i++)
{
soundex(code, argv[i]) ;
printf("The Soundex Code for \"%s\" is: %s\n", argv[i],code);
}
exit(0);
}