#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*因為ansi標準不接受//註解形式*/
/*先建Table好方便,規則二的先暫定給它-1*/
char encodeTable[]={-1,'1','2','3',-1,'1','2',-1,-1,'2','2','4','5','5',
-1,'1','2','6','2','3',-1,'1',-1,'2',-1,'2'};
/*編碼器*/
char* encode(const char *n)
{
char mid[21]; /*中介*/
char *re
= malloc(5*sizeof(char)); /*最終結果*/ re[0] = re[1] = re[2] = re[3] = '0';
re[4] = '\0'; /*先預填'0'與'\0',完成規則5,6*/
int i = 0, j = 1;
/*第一個while完成規則2,4*/
while(n[i] != '\0')
{
mid[i] = encodeTable[n[i]-'A'];
i++;
}
mid[i] = '\0';
i = 1;
re[0] = n[0]; /*完成規則1*/
/*第二個while完成規則3*/
while(mid[i] != '\0')
{
/*
第一個先填入因為規則3的補充 including the first letter
(規則1等等會完成)
之後有-1的都不填入
還要注意當前編碼是否與前一個相同
如果4個編碼已經填完後面就不處理了
*/
if(mid[i] != -1 && mid[i-1] != mid[i])
{
re[j] = mid[i];
j++;
if(j == 4)
break;
}
i++;
}
return re;
}
int main()
{
char name[21];
printf("%-25s%s","NAME", "SOUNDEX CODE\n"); while(scanf("%s", name
) != EOF
) {
char *tmp = encode(name);
}
printf("%s\n","END OF OUTPUT");
return EXIT_SUCCESS;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLyrlm6DngrphbnNp5qiZ5rqW5LiN5o6l5Y+XLy/oqLvop6PlvaLlvI8qLwovKuWFiOW7ulRhYmxl5aW95pa55L6/77yM6KaP5YmH5LqM55qE5YWI5pqr5a6a57Wm5a6DLTEqLwpjaGFyIGVuY29kZVRhYmxlW109ey0xLCcxJywnMicsJzMnLC0xLCcxJywnMicsLTEsLTEsJzInLCcyJywnNCcsJzUnLCc1JywKCQkJCQktMSwnMScsJzInLCc2JywnMicsJzMnLC0xLCcxJywtMSwnMicsLTEsJzInfTsKCi8q57eo56K85ZmoKi8KY2hhciogZW5jb2RlKGNvbnN0IGNoYXIgKm4pCnsKCWNoYXIgbWlkWzIxXTsgLyrkuK3ku4sqLwoJY2hhciAqcmUgPSBtYWxsb2MoNSpzaXplb2YoY2hhcikpOyAvKuacgOe1gue1kOaenCovCglyZVswXSA9IHJlWzFdID0gcmVbMl0gPSByZVszXSA9ICcwJzsKCXJlWzRdID0gJ1wwJzsgLyrlhYjpoJDloasnMCfoiIcnXDAn77yM5a6M5oiQ6KaP5YmHNSw2Ki8KCWludCBpID0gMCwgaiA9IDE7CgkvKuesrOS4gOWAi3doaWxl5a6M5oiQ6KaP5YmHMiw0Ki8KCXdoaWxlKG5baV0gIT0gJ1wwJykKCXsKCQltaWRbaV0gPSBlbmNvZGVUYWJsZVtuW2ldLSdBJ107CgkJaSsrOwoJfQoJbWlkW2ldID0gJ1wwJzsKCWkgPSAxOwoJcmVbMF0gPSBuWzBdOyAvKuWujOaIkOimj+WJhzEqLwoJLyrnrKzkuozlgIt3aGlsZeWujOaIkOimj+WJhzMqLwoJd2hpbGUobWlkW2ldICE9ICdcMCcpCgl7CgkJIC8qCgkJCeesrOS4gOWAi+WFiOWhq+WFpeWboOeCuuimj+WJhzPnmoToo5zlhYUgaW5jbHVkaW5nIHRoZSBmaXJzdCBsZXR0ZXIKCQkJKOimj+WJhzHnrYnnrYnmnIPlrozmiJApCgkJCeS5i+W+jOaciS0x55qE6YO95LiN5aGr5YWlCgkJCemChOimgeazqOaEj+eVtuWJjee3qOeivOaYr+WQpuiIh+WJjeS4gOWAi+ebuOWQjAoJCQnlpoLmnpw05YCL57eo56K85bey57aT5aGr5a6M5b6M6Z2i5bCx5LiN6JmV55CG5LqGCgkJICovCgkJaWYobWlkW2ldICE9IC0xICYmIG1pZFtpLTFdICE9IG1pZFtpXSkKCQl7CgkJCXJlW2pdID0gbWlkW2ldOwoJCQlqKys7CgkJCWlmKGogPT0gNCkKCQkJCWJyZWFrOwoJCX0KCQlpKys7Cgl9CglyZXR1cm4gcmU7Cn0KCmludCBtYWluKCkKewoJY2hhciBuYW1lWzIxXTsKCXByaW50ZigiJTlzIiwgIiIpOwoJcHJpbnRmKCIlLTI1cyVzIiwiTkFNRSIsICJTT1VOREVYIENPREVcbiIpOwoJd2hpbGUoc2NhbmYoIiVzIiwgbmFtZSkgIT0gRU9GKQoJewoJCXByaW50ZigiJTlzIiwgIiIpOwoJCXByaW50ZigiJS0yNXMiLCBuYW1lKTsKCQljaGFyICp0bXAgPSBlbmNvZGUobmFtZSk7CgkJcHJpbnRmKCIlc1xuIiwgdG1wKTsKCQlmcmVlKHRtcCk7Cgl9CglwcmludGYoIiUxOXMiLCAiIik7CglwcmludGYoIiVzXG4iLCJFTkQgT0YgT1VUUFVUIik7CgkKCXJldHVybiBFWElUX1NVQ0NFU1M7Cn0=