有更好的方法可以解决这个问题吗?

Is there a better way to approach this?

本文关键字:问题 解决 更好 方法      更新时间:2023-10-16

我基本上是在试图制作一个将罗马数字变成十进制的程序,这就是验证只有罗马数字被接受为输入。

我确定有更有效的方法可以做到这一点。我是编程的新手。

int main() 
{
    string valid = {"IIIIIVIIXIILIICIIDIIMIVIIVVIVXIVLIVCIVDIVMIXIIXVIXXIXLIXCIXDIXMILIILVILXILLILCILDILMICIICVICXICLICCICDICMIDIIDVIDXIDLIDCIDDIDMIMIIMVIMXIMLIMCIMDIMMVIIVIVVIXVILVICVIDVIMVVIVVVVVXVVLVVCVVDVVMVXIVXVVXXVXLVXCVXDVXMVLIVLVVLXVLLVLCVLDVLMVCIVCVVCXVCLVCCVCDVCMVDIVDVVDXVDLVDCVDDVDMVMIVMVVMXVMLVMCVMDVMMXIIXIVXIXXILXICXIDXIMXVIXVVXVXXVLXVCXVDXVMXXIXXVXXXXXLXXCXXDXXMXLIXLVXLXXLLXLCXLDXLMXCIXCVXCXXCLXCCXCDXCMXDIXDVXDXXDLXDCXDDXDMXMIXMVXMXXMLXMCXMDXMMLIILIVLIXLILLICLIDLIMLVILVVLVXLVLLVCLVDLVMLXILXVLXXLXLLXCLXDLXMLLILLVLLXLLLLLCLLDLLMLCILCVLCXLCLLCCLCDLCMLDILDVLDXLDLLDCLDDLDMLMILMVLMXLMLLMCLMDLMMCIICIVCIXCILCICCIDCIMCVICVVCVXCVLCVCCVDCVMCXICXVCXXCXLCXCCXDCXMCLICLVCLXCLLCLCCLDCLMCCICCVCCXCCLCCCCCDCCMCDICDVCDXCDLCDCCDDCDMCMICMVCMXCMLCMCCMDCMMDIIDIVDIXDILDICDIDDIMDVIDVVDVXDVLDVCDVDDVMDXIDXVDXXDXLDXCDXDDXMDLIDLVDLXDLLDLCDLDDLMDCIDCVDCXDCLDCCDCDDCMDDIDDVDDXDDLDDCDDDDDMDMIDMVDMXDMLDMCDMDDMMMIIMIVMIXMILMICMIDMIMMVIMVVMVXMVLMVCMVDMVMMXIMXVMXXMXLMXCMXDMXMMLIMLVMLXMLLMLCMLDMLMMCIMCVMCXMCLMCCMCDMCMMDIMDVMDXMDLMDCMDDMDMMMIMMVMMXMMLMMCMMDMMM"};
    string s;
    while (true) {
        cout << "Please enter a roman numeral or Q to quit the program: ";
        cin >> s;
        if (valid.find(s) != string::npos) {
            int num;
            num = intConversion(s);
            cout << num << "n";
        }
        else if (s == "Q") {
            cout << "Thank you for using the program." << "n";
            break;
        } else {
            cout << "Invalid letter!" << "n";
        }
    }
    return 0;
    system("pause");
}

valid字符串是可怕的丑陋和不必要的开销。我建议完全摆脱它,只需让intConversion()返回错误,如果输入无法转换。

bool intConversion(const string &s, int *num)
{
    // parse s and set *num as needed...
    return true or false accordingly;
}
int main()
{
    string s;
    while (true) {
        cout << "Please enter a roman numeral or Q to quit the program: ";
        cin >> s;
        if (s == "Q") {
            cout << "Thank you for using the program." << "n";
            break;
        }
        int num;
        if (intConversion(s, &num))
            cout << num << "n";
        } else {
            cout << "Invalid input!" << "n";
        }
    }
    system("pause");
    return 0;
}

我找到了解决方案。

int main() 
{
string valid = {"IVXLCDM"};
string s;
while (true) {
    cout << "Please enter a roman numeral or Q to quit the program: ";
    cin >> s;
    if (valid.find_last_of(s) != string::npos) {
        int num;
        num = intConversion(s);
        cout << num << "n";
    }
    else if (s == "Q") {
        cout << "Thank you for using the program." << "n";
        break;
    } else {
        cout << "Invalid letter!" << "n";
    }
}
return 0;
system("pause");

}