C++ 罗马加法形式转换
c++ Roman Additive Form Conversion
我正在开发一个从罗马转换为十进制的程序。我必须验证两件事:一是输入的字符是 M 或 D 或 C 或 L 或 X 或 V 或 I,换句话说,对处理有效。
第二,我必须确保更大的字符值首先出现,如果不打印和错误消息并让用户重试(这是我卡住的部分)
例如,如果我想输入 9 并且输入 IX,它应该显示一条错误消息,因为不是加法形式。应该是八。我如何对此进行编码,以便它比较字符以了解较大的字母值是否在第一个等等?
我不断得到不正确的验证。
有没有办法为字符串中的字母赋值?我正在考虑将它们作为我知道如何验证输入格式的 int 值进行比较。
void RomanNum::setRomanNumber() //get input and calculate decimal equivalent
{
//I 1, V 5, X 10, L 50, C 100, D 500, M 1000
int value = 0;
string input;
char current, next;
enum validationData { M, D, C, L, X, V, I };
bool validationCharacters = true;
//bool validationAdditiveForm = true;
getline(cin, input, 'n');
for (int i = 0; i < input.length(); i++) //calculate each Roman letter at a time
{
current = input[i];
next = current + 1;
if (current >= validationData(next))
{
switch (input[i])
{
case 'M':
value += 1000;
break;
case 'D':
value += 500;
break;
case 'C':
value += 100;
break;
case 'L':
value += 50;
break;
case 'X':
value += 10;
break;
case 'V':
value += 5;
break;
case 'I':
value += 1;
break;
default:
validationCharacters = false;
break;
}
}
else
{
cout << "nInvalid order. Bigger values go firstn";
}
}
}
我建议使用std::map<char, int>
来保存letetrs和值之间的映射。
使用映射,您可以将输入字符串(字符序列)转换为值序列(std::vector<int>
)。从那里开始,只需一次检查即可查看向量是否已排序,以及一次函数调用即可将所有值相加。(我会把找到合适的功能留作家庭作业)
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- C++ 罗马加法形式转换