我正在编写代码,其中用户将输入罗马数字,而输出将是常规数字。我已经完成了这一步,但是下一部分却遇到了麻烦,
扩展程序,以便它读取并转换所有输入数字,直到标准输入上的文件末尾为止。您可能只需在读取单行的代码周围添加适当的“读取循环”就可以做到这一点。
我当前的代码是:
#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
答案 0 :(得分:1)
while (cin >> str) {
cout << ""<< romantoArabic(str) << endl;
}