below is a program to convert integers to roman numerals and vice versa.It's working for int to roman but i am struggling to work on roman to int.I know i have to take the lenght of the roman numeral and use it to determine the size of the array Roman[] in the Roman2Decimal function.I don't know how to call the function GetValue in the Roman2Decimal function and what can i do to get the input of roman numerals.



#include <iostream.h>
#include <iomanip.h>
#include <cstring>
#include <math.h>//for the power function



class romanNumerals {
// handles arithmetic operations on Roman Numerals
// conditions maintained in class:
// 0 < num < 3999
public:
void returnRoman (char roman[]); // returns roman numeral
void setArabic (int number); // accepts integer
void setRoman (char* roman); // accepts roman numeral
bool isError (); // returns true if the most recent operation has caused an error.
int GetValue(char);
int Roman2Decimal(const char *Roman, int length);
void IntToRoman( int iArabic, char *szRoman, int Size );


private:
int num; // the internal representation of the roman numeral
// the actual roman numeral is not maintained
}; // class romanNumerals
void InitData();

int main()
{


int value;
char Numeral;

cout<<"enter an integer: ";
cin>>value;
char roman[16] = {0};
InitData();
romanNumerals rom;
rom.IntToRoman( value, roman, 16 );
cout << "roman value is: " << roman<<"\n";
char* x = "MCCXXXIV";
int y = rom.Roman2Decimal(x,strlen(x));
cout<<y<<endl;
return 0;
}

char roman_numbers[3][3] = {0};
void InitData()
{
roman_numbers[0][0] = 'M';
roman_numbers[0][1] = 'D';
roman_numbers[0][2] = 'C';

roman_numbers[1][0] = 'C';
roman_numbers[1][1] = 'L';
roman_numbers[1][2] = 'X';

roman_numbers[2][0] = 'X';
roman_numbers[2][1] = 'V';
roman_numbers[2][2] = 'I';
}

void romanNumerals::IntToRoman( int iArabic, char *szRoman, int Size )
{
int iNumberOfThousands = iArabic / 1000;
int iCurrentChar = 0;
if( iNumberOfThousands > 0 )
{
for( iCurrentChar = 0; iCurrentChar < iNumberOfThousands; iCurrentChar++ )
{
szRoman[iCurrentChar] = 'M';
}
}

for( int i = 0; i < 3; i++ )
{
int k1 = pow(10 , (3 - i));
int k2 = pow(10 , (2 - i));
int iNextDigit = (iArabic - ((iArabic / k1)*k1 )) / k2;

if( iNextDigit == 9 )
{
szRoman[iCurrentChar++] = roman_numbers[i][2];
szRoman[iCurrentChar++] = roman_numbers[i][0];
iNextDigit = 0;
}
else if ( iNextDigit == 4 )
{
szRoman[iCurrentChar++] = roman_numbers[i][2];
szRoman[iCurrentChar++] = roman_numbers[i][1];
iNextDigit = 0;
}
else if( iNextDigit >= 5 )
{
szRoman[iCurrentChar++] = roman_numbers[i][1];//'D';
iNextDigit -= 5;
}
while( iNextDigit > 0 )
{
szRoman[iCurrentChar++] = roman_numbers[i][2];//'C';
iNextDigit--;
}
}
}

int romanNumerals::Roman2Decimal(const char *Roman,int length)
{
int Total = 0;

for(int i = 0; i < length; i++)
{
if(GetValue(Roman[i]) < GetValue(Roman[i + 1]))
Total -= GetValue(Roman[i]);
else
Total += GetValue(Roman[i]);

}

num=Total;//saves the roman's integer representation
return Total;

}

int romanNumerals::GetValue(char numeral)
{
int value = 0;

switch(numeral)
{
case 'I':
value = 1;
break;

case 'V':
value = 5;
break;

case 'X':
value = 10;
break;

case 'L':
value = 50;
break;
case 'C':
value = 100;
break;
case 'D':
value = 500;
break;
case 'M':
value = 1000;
break;
default:
break;
}
return value;

}

void romanNumerals::setRoman (char* roman)
{


}

void romanNumerals::returnRoman (char roman[])
{

}

void romanNumerals::setArabic (int number)
{

}