我有一个算法应该接受一个名为 str
的字符串,并根据定义为的特定规则检查它:
IX 或 IV 之后没有任何内容。 如果规则没有被破坏,它将打印 legal,如果规则被破坏,它将打印 Illegal。
这是我创建的代码:
string str = "MXCIVXX";
int length = str.length();
bool legal = true;
for (int i = 0; i < length; i++) {
if ((str[i] == 'I' && str[i + 1] == 'X') && (str[i + 2] != '/0'))
legal = false;
if ((str[i] == 'I' && str[i + 1] == 'V') && (str[i + 2] != '/0'))
legal = false;
}
if (legal == true)
cout << "Legal" << endl;
else if (legal == false)
cout << "Illegal" << endl;
我已经测试了字符串中的多个罗马数字,但如果 IX 后跟字符串中的另一个字符,它会打印出合法的结果。我该如何解决这个问题以确认 IX 或 IV 后面没有跟另一个字符?
最佳答案
你的意思是空字符,所以 '\0'
而不是 '/0'
此外,您的方法不准确(请阅读以下评论并感谢 @NathanOliver)。这种方法应该效果更好:
int main()
{
std::string str = "IX";
int size = str.size();
bool legal = true;
if (str[size - 2] == 'I') // the char before the last char
{
if (str[size - 1] == 'V' || str[size - 1] == 'X') // the last char
legal = true;
else
legal = false;
}
else
legal = false;
if (legal)
std::cout << "Legal" << std::endl;
else
std::cout << "Illegal" << std::endl;
getchar();
return 0;
}
关于c++ - 检查 IX 或 IV 后是否跟另一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37079829/