c++ - 我需要知道如何扩展程序,以便它读取并转换所有输入数字,直到标准输入文件结束
问题描述
我正在编写代码,用户将输入一个罗马数字,输出将是一个常规数字。我已经完成了这一点,但是我在下一部分遇到了麻烦,即:
扩展程序,使其读取并转换所有输入数字,直到标准输入上的文件结尾。您可能只需在读取单行的代码周围添加适当的“读取循环”即可做到这一点。
我目前的代码是:
#include<iostream>
#include<string>
using namespace std;
int value(char r){
if(std::toupper(r) == 'I')
return 1;
if (std::toupper(r) == 'V')
return 5;
if (std::toupper(r) == 'X')
return 10;
if (std::toupper(r) == 'L')
return 50;
if (std::toupper(r) == 'C')
return 100;
if (std::toupper(r) == 'D')
return 500;
if (std::toupper(r) == 'M')
return 1000;
return -1;
}
int romantoArabic(string &str){
int res = 0;
for (int i=0; i<str.length(); i++)
{
int s1 = value(str[i]);
if (i+1 < str.length())
{
int s2 = value(str[i+1]);
if (s1 >= s2)
{
res = res + s1;
}
else
{
res = res + s2 - s1;
i++; // Value of current symbol is
}
}
else
{
res = res + s1;
i++;
}
}
return res;
}
int main(){
string str;
cout<<"";
cin>>str;
cout << ""<< romantoArabic(str) << endl;
return 0;
}
比如说,用户要输入以下内容(顺便说一句,这是需要输入的内容,目前我的代码不允许我这样做):
i
ii
iii
iv
v
vi
vii
viii
ix
我的输出是:
1
什么时候应该:
1
2
3
4
5
6
7
8
9
解决方案
while (cin >> str) {
cout << ""<< romantoArabic(str) << endl;
}
推荐阅读
- amazon-emr - 使用 Hudi 时无法在 EMR 中的 AWS Glue 目录上运行 spark.sql
- entity-framework - 我应该如何为 Blazor 配置实体框架生命周期?
- github - 添加一个 gitignore 文件
- c# - 继承自抽象类的泛型类的 C# 类型
- python - 为什么 pyrlp.Serializable 类不允许在初始化后编辑属性?如何才能做到这一点?
- javascript - 如何在 Electron 中删除 DOM 元素
- swift - 为什么我的 TableViewController 只返回一个可折叠部分?
- sql - 为什么要评估带有不可能的 CASE 语句的查询?
- python - Pandas 的多线程问题
- java - JDA - 如何将“成员”对象转换为“用户”对象,反之亦然?