2009-07-26 34 views
2

ローマ数字を読むために文字列を部分に分割しようとしています。ユーザーが文字列を部分に分割する方法 - ローマ数字

"XI" 

を入力した場合たとえば、私はプログラムは、私が1であり、Xは、このようなデータの検証が動作するためには10であることを理解することができるようにしたいです。文字列から個々の文字、角括弧を使用してアクセスするには

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

する割り当てを用心します'='と比較 '=='、文字列 '' X ''と' 'X' 'の文字の間にあります。また、 '' int roman + = 10; ''の宣言は、あなたが意図したものではない、不確定な値に10を加えます。さらに、' 'if''ステートメントの外に蓄積された値の宣言を隠します。 –

+0

これはちょうど短い例だったので、人々は私が意味することの要点を得るでしょう:/あなたは代入演算子、タイプミスについては正しいです。 – trikker

答えて

3

:上記

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

は何のことではありません完全な例を意味しますが、あなたが始めるのに十分でなければなりません。この例では、文字列romanの最初の文字を参照しています(文字は左からインデックス番号0で番号が付けられています)。これは、文字が'X'あるかどうかをチェックし、もしそうであれば、擬似コードとして扱い、あなたが知らない言語からこれを行うために10

3

機能によってnum変数をインクリメント:

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; 
} 
+0

私は ' - '文字がどこから来ているのか理解していません...ローマ数字には負の記号はありません。 – Polaris878

+0

私は自分のローカル目的のためにそれをサポートしています。あなたがそれを好きではない場合は、それを裂く。 – chaos