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.