首页 > 解决方案 > 我需要知道如何扩展程序,以便它读取并转换所有输入数字,直到标准输入文件结束

问题描述

我正在编写代码,用户将输入一个罗马数字,输出将是一个常规数字。我已经完成了这一点,但是我在下一部分遇到了麻烦,即:

扩展程序,使其读取并转换所有输入数字,直到标准输入上的文件结尾。您可能只需在读取单行的代码周围添加适当的“读取循环”即可做到这一点。

我目前的代码是:

#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

标签: c++

解决方案


while (cin >> str) {
    cout << ""<< romantoArabic(str) << endl;
}

推荐阅读