有更好的方法可以解决这个问题吗?
Is there a better way to approach this?
我基本上是在试图制作一个将罗马数字变成十进制的程序,这就是验证只有罗马数字被接受为输入。
我确定有更有效的方法可以做到这一点。我是编程的新手。
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");
}
相关文章:
- Project Euler问题4的错误解决方案
- 在java中解决这段代码时面临循环中的问题
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 难以理解某些人解决IOI问题的源代码
- 节俭并发:未解决的外部问题
- IpOpt拒绝解决不受约束的问题
- 如何解决这个超硬恒星的创造问题
- 循环无限运行C++解决骑士之旅问题
- 使用 bfs 解决连接组件问题时得到错误的答案
- 如何解决 Ninja c++ 构建和执行问题
- 无法在问题解决方案中执行输出逻辑
- 如何在不到O(N)的时间内解决这个问题?
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 如何在不使用额外空间的情况下解决这个问题?
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 如何解决"no Qt platform plugin could be initialized"问题?
- 如何解决可能的唯一组合问题
- Windows上的模板有什么问题?解决方案是什么