Kirjainten samaistus suoritettaisiin siten, että olisi käytössä taulukko, jossa olisi kunkin kirjaimen ASCII- koodiarvon kohdalla kirjaimelle uusi koodi, sen mukaan mihin kohti kirjain lajitellaan. Voisimme esimerkiksi numeroida:
0x20 = välimerkit 0x30 = '0' 0x31 = '1' .. 0x39 = '9' 0x41 = 'A' ja 'a' (saksassa myös 'Ä' ja 'ä') 0x42 = 'B' ja 'b' ...
Tätä varten tarvitsemme luokan:
cJarjestys_avain { /* Avaimen muodostuksessa käytettä tyyppi */
char avainarvo[MERKKEJA]; /* Miten kukin kirjain muuttuu */
void alusta();
public:
cJarjestys_avain() { alusta(); )
char Avainarvo(char i) { return avainarvo[(unsigned int)i]; }
};
static cJarjestys_avain JARJESTYS;
Taulukko alustettaisiin seuraavasti:
void cJarjestys_avain::alusta() {
avainarvo[(unsigned char) ','] = 0x20;
avainarvo[(unsigned char) ' '] = 0x20;
...
avainarvo[(unsigned char) 'A'] = 0x41;
avainarvo[(unsigned char) 'a'] = 0x41;
avainarvo[(unsigned char) 'B'] = 0x42;
avainarvo[(unsigned char) 'b'] = 0x42;
...
avainarvo[(unsigned char) 'Ä'] = 0x5c;
avainarvo[(unsigned char) 'ä'] = 0x5c;
...
}
Ehkä on kuitenkin helpompi käyttää muutamaa makroa:
#define A_1 (mika,miksi) avainarvo[(unsigned char)mika] = miksi
#define A_A (mi,mp,miksi) A_1(mi,miksi); A_1(mp,miksi)
/****************************************************************************/
void cJarjestys_avain::alusta() {
{
int i;
for (i=0; i<MERKKEJA; i++) A_1(i,0x20); /* Kaikki tuntemat. merkit välil. */
A_1('0',0x30); A_1('1',0x31); A_1('2',0x32); A_1('3',0x33); A_1('4',0x34);
A_1('5',0x35); A_1('6',0x36); A_1('7',0x37); A_1('8',0x38); A_1('9',0x39);
A_A('A','a',0x41); A_A('B','b',0x42); A_A('C','c',0x43);
A_A('D','d',0x44); A_A('E','e',0x45); A_A('F','f',0x46);
A_A('G','g',0x47); A_A('H','h',0x48); A_A('I','i',0x49);
A_A('J','j',0x4a); A_A('K','k',0x4b); A_A('L','l',0x4c);
A_A('M','m',0x4d); A_A('N','n',0x4e); A_A('O','o',0x4f);
A_A('P','p',0x50); A_A('Q','q',0x51); A_A('R','r',0x52);
A_A('S','s',0x53); A_A('T','t',0x54); A_A('U','u',0x55);
A_A('V','v',0x56); A_A('W','w',0x57); A_A('X','x',0x58);
A_A('Y','y',0x59); A_A('Z','z',0x5a);
A_A('[sinvcircumflex]','',0x59);
A_A('Å','å',0x5b); A_A('Ä','ä',0x5c); A_A('Ö','ö',0x5d);
}
#undef A_1
#undef A_A
Avain muodostetaan nyt JARJESTYS.avainarvo - taulukkoa käyttäen. Kuitenkin erikoistapaukset kuten Mac ja Mc täytyisi käsitellä ensin erikseen vaikkapa Mc - > Mac.