# Thread: Converting Symbols to Integers

1. ## Converting Symbols to Integers

Can anyone give me somewhere to start if
I have to convert from Roman Numeral to decimals?

M - 1000
D - 500
C - 100
L - 50
X - 10
V - 5
I - 1

that if the user inputs CD - 400
MD - 1500
IX - 9
MXIII - 1013

I just need a rough guide on how to do this.
All I know is if the digit's value before is smaller, then subtracts and if not, just keep adding. any example would help me greatly. thanks.

PS: how do I also make the scanf determine the number of letters input?

2. This might give you some ideas. It isn't complete by any means, but is a general approach.

Code:
```char numerals[80];
int numeralCount,i;
int firstValue,secondValue;
scanf("%s",numerals);
printf("You entered: %s\n",numerals);
numeralCount = strlen(numerals);
for (i = 0; i < numeralCount; i++) {
printf("%c\n",numerals[i]);
if (i != (numeralCount - 1)) {   // not on last character
firstValue = getValue(numerals[i]);    // return 1000 for 'M', etc....
secondValue = getValue(numerals[i+1]);
if (firstValue < secondValue) {
// do your 'less than' magic
i++;   // 'consume' the second char, since you want to step over it next time
}
else {
}
}
else {   // on last character
// to get here, must need to add final char value
}
}```
note that when you have a 'less than' case, like IV, you want the next time thru the loop to skip to the character after the V. That's what the i++ 'consume' is for.

You'd have a 'finalValue' variable or some such that got added to each time thru the loop, and at the end would be your final result.

-------
Beginner Computer Programming
teaching programming to beginners using C

3. Originally Posted by xaykogeki
PS: how do I also make the scanf determine the number of letters input?
Use strlen on the string, or some loop like this:
Code:
```char ch;
while (scanf("%c",&ch)) {
[ verfify ch ]
[ add value to total ] // see note below
}```
You might find this interesting (skip the first couple paragraphs), I have two different roman numeral parsers in C there:

Parsing

NOTE: It's an interesting parsing task because you must use some kind of "lookahead" character to determine what a character combination's value is -- eg, IX does not equal 11, it equals 9. Because of that the loop idea might not be as good as just reading in a string all at once. Have a look at that page.

4. Originally Posted by MK27
Use strlen on the string, or some loop like this:
Code:
```char ch;
while (scanf("%c",&ch)) {
[ verfify ch ]
[ add value to total ] // see note below
}```
Or scanf's %n modifier, like this:
Code:
```#include <stdio.h>

int main()
{
char buf[1024];
int bufLength;
if(scanf("%1023s%n", buf, &bufLength)) {
printf("Your string has a length of %d\n", bufLength);
}
}```