给定一组规则检查罗马数字的错误
Checking Errors of Roman Numerals Given A Set of Rules
所以对于我的 comp sci class 我的任务是对罗马数字进行加、减、除和乘,前提是它们通过了我给出的 12 条规则。
我创建了一个包含 13 个元素的布尔数组来跟踪违反了哪些规则。我创建了一个名为 checkErrors
的函数,它调用 12 个规则检查函数中的每一个。我调用 checkErrors
在计算完成之前检查每个罗马数字,并打印出哪些错误是错误的(如果有的话),但不是只打印出错误的错误,而是打印出每个错误。
下面是来自 checkErrors
的片段,每个规则都相同(checkErrorOne、checkErrorTwo...等)。如果规则被破坏,errors[0]
被设置为 false 以表明整个罗马数字是不合法的。
`bool checkErrors(string romanNumeral, bool * errors) {
if (checkErrorOne(romanNumeral) == false) {
errors[1] = false;
errors[0] = false;
}
if (checkErrorTwo(romanNumeral) == false) {
errors[2] = false;
errors[0] = false;
}
if (checkErrorThree(romanNumeral) == false) {
errors[3] = false;
errors[0] = false;
}
if (checkErrorFour(romanNumeral) == false) {
errors[4] = false;
errors[0] = false;
}
if (checkErrorFive(romanNumeral) == false) {
errors[5] = false;
errors[0] = false;
}
if (checkErrorSix(romanNumeral) == false) {
errors[6] = false;
errors[0] = false;
}
if (checkErrorSeven(romanNumeral) == false) {
errors[7] = false;
errors[0] = false;
}
if (checkErrorEight(romanNumeral) == false) {
errors[8] = false;
errors[0] = false;
}
if (checkErrorNine(romanNumeral) == false) {
errors[9] = false;
errors[0] = false;
}
if (checkErrorTen(romanNumeral) == false) {
errors[10] = false;
errors[0] = false;
}
if (checkErrorEleven(romanNumeral) == false) {
errors[11] = false;
errors[0] = false;
}
if (checkErrorTwelve(romanNumeral) == false) {
errors[12] = false;
errors[0] = false;
}
if (errors[0] == true)
return true;
else if (errors[0] == false)
return false;
}
`
到return要说的第一个元素的值是否合法。
在此之后,当我去打印每条被破坏的规则时,我使用以下内容:
void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){
cout << romanNumeral1 << " is illegal becasue" << endl;
if (errors[1] == false)
cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl;
if (errors[2] == false)
cout << "I is not followed by I, V, or X;" << endl;
if (errors[3] == false)
cout << "X is not followed by I, V, X, L, or C;" << endl;
对于 12 条规则中的每一条。它打印出每一个错误,而不是每一个错误。
如果有人可以帮助我的逻辑,将不胜感激。
void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){
cout << romanNumeral1 << " is illegal becasue" << endl;
if (errors[1] == false)
cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl;
if (errors[2] == false)
cout << "I is not followed by I, V, or X;" << endl;
if (errors[3] == false)
cout << "X is not followed by I, V, X, L, or C;" << endl;
编辑:为什么我编写的代码会打印出我创建的 12 个错误中的每一个,而不是仅打印出违反的错误?
谢谢
好的,首先,您没有 post 您的 checkErrors
代码,所以我在这里假设。
我认为您定义的是
bool checkErrors(string, bool errors[13]){
这意味着,它不采用指针,而是 13 个布尔值的副本。所以它们在你的函数内被修改,而不是在它之外。将其更改为:
bool checkErrors(string, bool* errors){
ps。下一次,请想想那些不了解你的问题的人将如何理解它。为您省去很多麻烦 ;)
题外话:您的程序可以通过一系列错误消息来简化。
if
语句阶梯将被循环替换:
for (unsigned int i = 0U; i < MAXIMUM_ERROR_TYPES; ++i)
{
if (errors[i])
{
std::cout << error_messages[i];
}
}
由于代码较少,因此注入缺陷的可能性较小。
所以对于我的 comp sci class 我的任务是对罗马数字进行加、减、除和乘,前提是它们通过了我给出的 12 条规则。
我创建了一个包含 13 个元素的布尔数组来跟踪违反了哪些规则。我创建了一个名为 checkErrors
的函数,它调用 12 个规则检查函数中的每一个。我调用 checkErrors
在计算完成之前检查每个罗马数字,并打印出哪些错误是错误的(如果有的话),但不是只打印出错误的错误,而是打印出每个错误。
下面是来自 checkErrors
的片段,每个规则都相同(checkErrorOne、checkErrorTwo...等)。如果规则被破坏,errors[0]
被设置为 false 以表明整个罗马数字是不合法的。
`bool checkErrors(string romanNumeral, bool * errors) {
if (checkErrorOne(romanNumeral) == false) {
errors[1] = false;
errors[0] = false;
}
if (checkErrorTwo(romanNumeral) == false) {
errors[2] = false;
errors[0] = false;
}
if (checkErrorThree(romanNumeral) == false) {
errors[3] = false;
errors[0] = false;
}
if (checkErrorFour(romanNumeral) == false) {
errors[4] = false;
errors[0] = false;
}
if (checkErrorFive(romanNumeral) == false) {
errors[5] = false;
errors[0] = false;
}
if (checkErrorSix(romanNumeral) == false) {
errors[6] = false;
errors[0] = false;
}
if (checkErrorSeven(romanNumeral) == false) {
errors[7] = false;
errors[0] = false;
}
if (checkErrorEight(romanNumeral) == false) {
errors[8] = false;
errors[0] = false;
}
if (checkErrorNine(romanNumeral) == false) {
errors[9] = false;
errors[0] = false;
}
if (checkErrorTen(romanNumeral) == false) {
errors[10] = false;
errors[0] = false;
}
if (checkErrorEleven(romanNumeral) == false) {
errors[11] = false;
errors[0] = false;
}
if (checkErrorTwelve(romanNumeral) == false) {
errors[12] = false;
errors[0] = false;
}
if (errors[0] == true)
return true;
else if (errors[0] == false)
return false;
} `
到return要说的第一个元素的值是否合法。
在此之后,当我去打印每条被破坏的规则时,我使用以下内容:
void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){
cout << romanNumeral1 << " is illegal becasue" << endl;
if (errors[1] == false)
cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl;
if (errors[2] == false)
cout << "I is not followed by I, V, or X;" << endl;
if (errors[3] == false)
cout << "X is not followed by I, V, X, L, or C;" << endl;
对于 12 条规则中的每一条。它打印出每一个错误,而不是每一个错误。
如果有人可以帮助我的逻辑,将不胜感激。
void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){
cout << romanNumeral1 << " is illegal becasue" << endl;
if (errors[1] == false)
cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl;
if (errors[2] == false)
cout << "I is not followed by I, V, or X;" << endl;
if (errors[3] == false)
cout << "X is not followed by I, V, X, L, or C;" << endl;
编辑:为什么我编写的代码会打印出我创建的 12 个错误中的每一个,而不是仅打印出违反的错误?
谢谢
好的,首先,您没有 post 您的 checkErrors
代码,所以我在这里假设。
我认为您定义的是
bool checkErrors(string, bool errors[13]){
这意味着,它不采用指针,而是 13 个布尔值的副本。所以它们在你的函数内被修改,而不是在它之外。将其更改为:
bool checkErrors(string, bool* errors){
ps。下一次,请想想那些不了解你的问题的人将如何理解它。为您省去很多麻烦 ;)
题外话:您的程序可以通过一系列错误消息来简化。
if
语句阶梯将被循环替换:
for (unsigned int i = 0U; i < MAXIMUM_ERROR_TYPES; ++i)
{
if (errors[i])
{
std::cout << error_messages[i];
}
}
由于代码较少,因此注入缺陷的可能性较小。