Note that there are some explanatory texts on larger screens.

plurals
  1. PORoman to decimal conversion
    primarykey
    data
    text
    <p>What do you think about this code? Is it the best way? Any improvement?</p> <p>Roman.h</p> <pre><code>#ifndef ROMAN_H #define ROMAN_H #include &lt;string&gt; #include &lt;map&gt; typedef unsigned long int UL_I; typedef std::map&lt; std::string, UL_I, std::less&lt; std::string &gt; &gt; Map; class Roman_Number { public: //Constructor Roman_Number( std::string ); void Convert_to_decimal(); UL_I get_Decimal() const; std::string get_Roman() const; private: std::string s_roman_number; UL_I d_number; Map pairs; Map pairs_substracting; //Utilitaries functions void _validate_(); void _initilize_pairs_() { pairs.insert( Map::value_type( "I", 1 ) ); pairs_substracting.insert( Map::value_type ( "IV", 4 ) ); pairs.insert( Map::value_type( "V", 5 ) ); pairs_substracting.insert( Map::value_type( "IX", 9 ) ); pairs.insert( Map::value_type( "X", 10 ) ); pairs_substracting.insert( Map::value_type( "XL", 40 ) ); pairs.insert( Map::value_type( "L", 50 ) ); pairs_substracting.insert( Map::value_type( "XC", 90 ) ); pairs.insert( Map::value_type( "C", 100 ) ); pairs_substracting.insert( Map::value_type( "CD", 400 ) ); pairs.insert( Map::value_type( "D", 500 ) ); pairs_substracting.insert( Map::value_type( "CM", 900 ) ); } UL_I _recursive_convert( std::string ); }; #endif </code></pre> <p>Roman.cpp</p> <pre><code>#include &lt;iostream&gt; #include "Roman.h" void Roman_Number::_validate_() { std::cout &lt;&lt; "Validating" &lt;&lt; std::endl; } Roman_Number::Roman_Number(std::string r_number ) { _initilize_pairs_(); s_roman_number = r_number; d_number = 0; } void Roman_Number::Convert_to_decimal() { std::string s_aux = s_roman_number; d_number = _recursive_convert( s_aux ); } UL_I Roman_Number::_recursive_convert( std::string new_roman ) { if( new_roman == "" ) return 0; if( pairs_substracting.find( new_roman.substr( 0 , 2 ) ) != pairs_substracting.end() ) return pairs_substracting[new_roman.substr( 0, 2 )] + _recursive_convert( new_roman.erase( 0, 2) ); else return pairs[new_roman.substr( 0, 1 )] + _recursive_convert( new_roman.erase( 0, 1 ) ); } UL_I Roman_Number::get_Decimal() const { return d_number; } std::string Roman_Number::get_Roman() const { return s_roman_number; } </code></pre> <p>main.cpp</p> <pre><code>#include &lt;iostream&gt; #include "Roman.h" int main() { Roman_Number R_N( "XIL" ); R_N.Convert_to_decimal(); std::cout &lt;&lt; R_N.get_Decimal(); return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload