作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
输入将是一串必须按其值排序的罗马数字。此任务还必须使用 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/
我正在 prolog 中完成一项作业扫描数字列表并应返回该列表是否是有效的罗马数字以及数字的十进制值。例如) 1 ?- roman(N, ['I'], []). N = 1 true. 2 ?- 当我
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试将字符串分成多个部分以读取罗马数字。例如,如果用户输入 "XI" 我希望程序能够理解我是 1,X 是 10,这样才能进行数据验证。 if(string roman == "X") int r
我是一名优秀的程序员,十分优秀!