【发布时间】:2017-03-27 22:22:19
【问题描述】:
输入将是一串必须按其值排序的罗马数字。此任务还必须使用 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,该谓词使用您的转换函数来比较值。 -
另请注意,您的转换不适用于 XC (90) 等数字
-
你能给我一段代码以便更好地理解吗? @paddy
-
我不确定您所说的“对字符串进行排序”是什么意思。您不想按 数字 排序吗?除非您进行字母排序(C、CC、CCC、CCCI、CCCII、CCCIII、CCCIV、CCCIX、CCCL、CCCLI 等)。
-
@Triple3XH:StackOverflow 上有很多关于此的现有问题。检查“运算符重载”。
标签: c++ string sorting roman-numerals