2009-07-26 8 views
2

J'essaie de diviser une chaîne en parties pour lire des chiffres romains. Par exemple, si l'utilisateur entreComment diviser une chaîne en parties - Chiffres romains

"XI" 

Je veux que le programme soit en mesure de comprendre que I est 1 et X est 10 pour une validation des données comme cela fonctionne.

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

Attention mission '=' versus comparaison '==', et entre les chaînes '" X "' et les caractères ''X''. En outre, la déclaration de '' int roman + = 10; '' ajoute 10 à une valeur indéterminée - probablement pas ce que vous vouliez, plus elle cache la déclaration de toute valeur accumulée en dehors de cette déclaration '' if ''. –

+0

C'était juste un petit exemple pour que les gens comprennent ce que je voulais dire:/Mais vous avez raison à propos de l'opérateur d'affectation, une faute de frappe. – trikker

Répondre

3

Pour accéder à un caractère individuel d'une chaîne, utilisez les crochets:

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

Ce qui précède est pas un exemple complet, mais devrait être suffisant pour vous aider à démarrer. Cet exemple regarde le premier caractère de la chaîne roman (les caractères sont numérotés à partir de la gauche avec l'index 0). Il vérifie si le caractère est 'X', et si oui, incrémente la variable num par 10.

3

Fonction pour ce faire d'une langue que vous ne savez pas, traiter comme pseudo-code:

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

Je ne comprends pas d'où vient le caractère '-' ... il n'y a pas de signe négatif en chiffres romains. – Polaris878

+0

Je le supporte pour mes besoins locaux. Si vous ne l'aimez pas, arrachez-le. – chaos

Questions connexes