2

ローマ数字を読むために文字列を部分に分割しようとしています。たとえば、ユーザーが入力した場合

"XI"

このようなデータ検証が機能するために、プログラムが I が 1 で X が 10 であることを理解できるようにしたいと考えています。

if(string roman == "X") int roman += 10;
 etc.
4

2 に答える 2

3

文字列から個々の文字にアクセスするには、角かっこを使用します。

int num = 0;
char r = roman[0];
if (r == 'X') {
    num += 10;
}

上記は決して完全な例ではありませんが、始めるには十分なはずです。この例では、文字列の最初の文字を調べますroman(文字は、左からインデックス 0 で始まる番号が付けられます)。文字が であるかどうかを確認し、そうである場合は、変数を 10'X'ずつ増やします。num

于 2009-07-26T00:51:22.677 に答える
3

あなたが知らない言語からこれを行うための関数は、疑似コードとして扱います:

int from_roman_numeral(string val) {
    val = upper_case(val);
    if(val == "N")
        return 0;
    status neg = False;
    if(val[0] == '-') {
        neg = True;
        val = val[1..];
    }
    int out = 0;
    int last = 0;
    int array values = allocate(127);
    values['M'] = 1000;
    values['D'] = 500;
    values['C'] = 100;
    values['L'] = 50;
    values['X'] = 10;
    values['V'] = 5;
    values['I'] = 1;
    int value;
    int next;
    for(int idx = 0, int len = strlen(val); idx < len; idx++) {
        value = values[val[idx]];
        unless(value)
            error("'" + val + "' is not a valid Roman numeral sequence");
        if(idx < len - 1 && (next = values[val[idx + 1]]) && next > value) {
            out += next - value;
            idx++;
        } else {
            out += value;
        }
    }
    return neg ? -out : out;
}
于 2009-07-26T00:51:53.163 に答える