Mikey - 3 months ago 19
C Question

# Roman Numeral To Decimal

Trying to implement a very simple Roman Numeral to Decimal converter but can't seem to figure out a way for the program to return -1 if any non-roman numeral characters are in the string. This is what I have so far.

``````#include <stdio.h>
#include <ctype.h>

int convertFromRoman(const char *s)
{

int i = 0;
int total = 0;

while (s[i] != '\0') {

if (isalpha(s[i]) == 0) {
return -1;
}

if (toupper(s[i]) == 'I') {
total += 1;
}

if (toupper(s[i]) == 'V') {
total += 5;
}

if (toupper(s[i]) == 'X') {
total += 10;
}

if (toupper(s[i]) == 'L') {
total += 50;
}

if (toupper(s[i]) == 'C') {
total += 100;
}

if (toupper(s[i]) == 'D') {
total += 500;
}

if (toupper(s[i]) == 'M') {
total += 1000;
} else {
return -1;
}

i++;
}

if (total == 0) {
return -1;
}

}

int main()
{
printf("%d\n", convertFromRoman("XVII"));
printf("%d\n", convertFromRoman("ABC"));
}
``````

The first one should return 17 and the second one should return -1. However they both return -1 but if I remove the else statement, the first one returns 17 and the second one returns 100.

Any help is appreciated.

Change `if()` `if()` `if()` `else` to `if()` `else if ()` `else if()` `else`

``````   if (toupper(s[i]) == 'I') {
total += 1;
}

else if (toupper(s[i]) == 'V') {
total += 5;
}

else if (toupper(s[i]) == 'X') {
total += 10;
}

....

else if (toupper(s[i]) == 'M') {
total += 1000;
} else {
return -1;
}
``````
Source (Stackoverflow)