変数の範囲チェックしてないけどデコーダの実装例
エンコーダも書いたけど自粛

#include <stdio.h>
int path1[] = {3,4,6,2,7,0,9,8,1,5};
int path2[] = {0,0,0,1,1,1,1,1,1,2,2};

struct keyinfo {
char *keyword;
char *start;
char *end;
};

struct keyinfo keys[]={
{"71255", NULL, NULL},
{"038701", NULL, NULL},
{"147803", NULL, NULL},
{"87634", NULL, NULL},
{"56905415", NULL, NULL},
{NULL,NULL,NULL}
};



int main()
{
char buffer[1024],*p;
int a,b,c,dest;

fgets(buffer, sizeof(buffer), stdin);
for(i = 0; keys[i].keyword!= NULL; i++){
keys[i].start = strstr(buffer,keys[i].keyword);
if(i != 0)
keys[i-1].end = keys[i].start;
keys[i].start += strlen(keys[i].keyword);
}

for(i=0; keys[i].keyword !=NULL; i++){
for(p = keys[i].start ; p < keys[i].end; p+=3){
a = path1[p[0]-0x30];
b = path1[p[1]-0x30];
c = path1[p[2]-0x30];
dest = ((path2[a] !=0)? 0 : a*100) + ((path2[a] == 2)? 0: b*10) + c;
putchar(dest);
}
printf("\n");
}
}