gpt4 book ai didi

c++ - 对一串罗马数字进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:53:20 27 4
gpt4 key购买 nike

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

最佳答案

解决问题的一种方法是定义有意义的比较 operator</比较 lambda 表达式/比较类,然后与 sort 一起使用算法:

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

例如,然后要对罗马数字的 vector 进行排序,您可以:

std::vector<RomanNumbers> nums;

std::sort(nums.begin(), nums.end(), RomanComparator);

假设:

#include <algorithm>    // std::sort
#include <vector> // std::vector

关于c++ - 对一串罗马数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43057423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com