monta@cmu-cs-g.ARPA (Peter Monta) (04/28/85)
Here is a C function that converts roman numeral strings to integers. It doesn't complain about syntax errors (I seem to remember my junior-high-school teacher insisting that ``IC'' is wrong, should be ``XCIX''; something like only one ``level'' of subtractive notation permitted). Anyway, if these semantics are wrong, tell me about it. (Thank goodness for positional notation.) Peter Monta monta@cmu-cs-g ..!rocherster!cmu-cs-pt!cmu-cs-g!monta -----------------------------------Cut Here----------------------------------- #include <stdio.h> #define max_table 7 static struct { char name; int value } table[max_table] = { {'i',1}, {'v',5}, {'x',10}, {'l',50}, {'c',100}, {'d',500}, {'m',1000} }; int rtoi(s) char s[]; { int i,j,old,new,sum; sum = 0; old = 0; for (i=strlen(s)-1; i>=0; i--) for (j=0; j<max_table; j++) if (table[j].name==s[i]) { new = table[j].value; if (new < old) sum -= new; else sum += new; old = new; break; } return sum; } main() { char s[50]; for (;;) { printf("roman numeral: "); scanf("%s",s); printf("value is %d\n",rtoi(s)); } }