Входными данными будет строка римских цифр, которые необходимо отсортировать по их значению. Также эта задача должна быть выполнена с использованием классов в c++
Пока я создал свой класс
#include<iostream>
#include<string>
using namespace std;
class RomanNumbers
{
public:
RomanNumbers(string = "");
void setRoman(string);
int convertToDecimal();
void printDecimal();
void printRoman();
private:
string roman;
int decimal;
};
И функции для преобразования числа из римской цифры в целочисленную форму, но мой вопрос: как мне их отсортировать, потому что я не могу создать новую строку, которая будет содержать преобразованные римские цифры и отсортировать строку. Любая помощь будет оценена.
#include<iostream>
#include<string>
#include "RomanNumbers.h"
using namespace std;
RomanNumbers::RomanNumbers(string myRoman)
{
roman = myRoman;
decimal = 0;
}
void RomanNumbers::setRoman(string myRoman)
{
roman = myRoman;
decimal = 0;
}
int RomanNumbers::convertToDecimal()
{
enum romans { I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000 };
for (int i = 0; i < roman.size(); i++)
{
switch (roman[i])
{
case 'M': decimal += M; break;
case 'D': decimal += D; break;
case 'C': decimal += C; break;
case 'L': decimal += L; break;
case 'X': decimal += X; break;
case 'V': decimal += V; break;
case 'I':
if (roman[i + 1] != 'I' && i + 1 != roman.size())
{
decimal -= 1;
}
else
{
decimal += 1;
}
break;
}
}
return decimal;
}
void RomanNumbers::printRoman()
{
cout << "Number in Roman form : " << roman;
cout << endl;
}
void RomanNumbers::printDecimal()
{
cout << "Number converted in integer form : " << decimal;
cout << endl;
}
std::pair<int,std::string>
, и отсортировать его, или вы можете сделать собственный предикат сортировки, переданный вstd::sort
, который использует вашу функцию преобразования для сравнения значений. - person paddy   schedule 28.03.2017std::pair
дает лишь незначительное преимущество. Основная проблема заключается в том, что вам нуженoperator<
такой, чтоRomanNumbers("M") < RomanNumbers("MX")
. Это не сложно, как только вы решите проблему, чтоdecimal
не установлен. Вы должны вызыватьconvertToDecimal
всякий раз, когда получаете новую строку. - person MSalters   schedule 28.03.2017