Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对一串罗马数字排序_C++_String_Sorting_Roman Numerals - Fatal编程技术网

C++ 对一串罗马数字排序

C++ 对一串罗马数字排序,c++,string,sorting,roman-numerals,C++,String,Sorting,Roman Numerals,输入将是一个罗马数字字符串,必须按其值排序。此外,此任务还必须使用c中的类来完成++ 到目前为止,我已经创建了我的类 #include<iostream> #include<string> using namespace std; class RomanNumbers { public: RomanNumbers(string = ""); void setRoman(string); int convertToDecimal();

输入将是一个罗马数字字符串,必须按其值排序。此外,此任务还必须使用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;

};
#包括
#包括
使用名称空间std;
类号
{
公众:
罗马数字(字符串=”);
无效字符(字符串);
int convertToDecimal();
void printDecimal();
void printRoman();
私人:
弦罗马;
整数十进制;
};
函数将一个数字从罗马数字转换成整数,但我的问题是:我应该如何排序,因为我不能创建一个包含转换后的罗马数字的新字符串并对字符串进行排序。任何帮助都将不胜感激

#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;
}
#包括
#包括
#包括“RomanNumber.h”
使用名称空间std;
RomanNumber::RomanNumber(字符串myRoman)
{
罗马=我的罗马;
十进制=0;
}
void romanumbers::setRoman(字符串myRoman)
{
罗马=我的罗马;
十进制=0;
}
int-romanumbers::convertToDecimal()
{
罗马人{I=1,V=5,X=10,L=50,C=100,D=500,M=1000};
对于(int i=0;icout解决问题的一种方法是定义一个有意义的比较
操作符。您可以创建一个新的数组/向量,将值存储为
std::pair
并对其进行排序,或者您可以将自定义排序谓词传递给
std::sort
,该谓词使用转换函数来比较值。还要注意你的转换对像XC(90)这样的数字不起作用。你能给我一段代码让我更好地理解吗?@paddyI不知道“对字符串排序”是什么意思。你不想按数字排序吗?除非你按字母顺序排序(C、CC、CCC、CCCI、CCCII、CCCIII、CCCIV、CCCIX、CCCL、CCCLI等)@Triple3XH:关于StackOverflow,这里有很多问题。请检查“运算符重载”。或者将该运算符定义为'operator@CrisLuengo我试图让接线员超负荷工作
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
struct RomanComp 
{
    bool operator() const (const RomanNumbers& lhs, const RomanNumbers& rhs)
    { 
        return lhs.decimal < rhs.decimal;
    }
} RomanComparator; // <--- note object instantiation
std::vector<RomanNumbers> nums;

std::sort(nums.begin(), nums.end(), RomanComparator);
#include <algorithm>    // std::sort
#include <vector>       // std::vector