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?
This might work. It isn't complete by any means, but is a general approach. Code: 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 { // just add the value } } 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
Use strlen on the string, or some loop like this: Code: Code: char ch; while (scanf("%c",&ch)) { [ verfify ch ] [ add value to total ] // see note below } Or scanf's %n modifier, like this: Code: 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); } }