|
No.594の書き込みを読んだ自分なりの解釈で組んでみました。
間違ってたらごめんなさい。
たとえばその書き込みにある
A R
A 5,-2
R -2, 7
という表の作成と参照は以下のような感じです。
前回の例では16進数の16個の文字を選んで適当な表を作っています。
あと、char_to_indexを使ってエラーチェックできるようにちょっと修正しました。
#include <stdio.h>
#define SIZE 2
#define CHAR_ERROR -1
const int char_to_index[] = {
#define __ CHAR_ERROR
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF */
__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 0:制御文字 */
__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 1:制御文字 */
__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 2: !"#$%&'()*+,-./ */
__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 3:0123456789:;<=>? */
__, 0, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 4:@ABCDEFGHIJKLMNO */
__, __, 1, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 5:PQRSTUVWXYZ[\]^_ */
__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 6:`abcdefghijklmno */
__, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, /* 7:pqrstuvwxyz{|}~ */
#undef __
};
int score[SIZE][SIZE];
#define SCORE(x, y) score[ char_to_index[x] ][ char_to_index[y] ]
int main(void)
{
const int table[SIZE][SIZE] = {
/* A R */
{ 5, -2}, /* A */
{ -2, 7}, /* R */
};
int x, y;
/* 得点表作成 */
/* SCORE('A', 'A') = 5;
SCORE('A', 'R') = -2;
SCORE('R', 'A') = -2;
SCORE('R', 'R') = 7;*/
for (y = 0; y < SIZE; y++)
for (x = 0; x < SIZE; x++)
score[x][y] = table[y][x];
/* 得点表参照 */
printf("(A,A) = % d\n", SCORE('A', 'A'));
printf("(A,R) = % d\n", SCORE('A', 'R'));
printf("(R,A) = % d\n", SCORE('R', 'A'));
printf("(R,R) = % d\n", SCORE('R', 'R'));
return 0;
}
[出力]
(A,A) = 5
(A,R) = -2
(R,A) = -2
(R,R) = 7
|