2017-02-24 119 views
-2

我基本上試圖做一個程序,將羅馬數字變成十進制,這是爲了驗證只有羅馬數字被接受爲輸入。有沒有更好的方法來解決這個問題?

我相信有這樣做的更有效的方法。我對編程非常陌生。

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"); 
} 
+0

這確實屬於在以下網頁:http://codereview.stackexchange.com/ –

+0

BTW,你的算法將測試用例失敗:IIIII,這是不是一個合法的羅馬數。此外,八是一個有效的數字,將失敗你的測試。 –

回答

1

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; 
} 
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"); 

}

相關問題