Моя программа записывает неверные данные в мой выходной файл, и я не уверен, почему это происходит.По сути, я пытаюсь проверить, сбалансировано ли уравнение, определив, есть ли пропущенные скобки или скобки.Эти уравнения читаются из входного файла.Чтобы проверить, сбалансированы ли они, я использую стек.По какой-то причине моя программа либо переоценивает количество пропущенных символов, либо даже не распознает, что пропущен символ.
По результатам тестирования, которое я пытался сделать, моя программа может зацикливаться большераз, что это должно быть в некоторых местах.Однако я не совсем уверен.Я также пытался протестировать свою программу с меньшим размером ввода, но это не сработало.
Вот соответствующий код.Следует отметить, что это для задания, в котором мне предлагается не использовать шаблон STL.Мои функции для стека в основном работают так же.Моя поп-функция удаляет все, что находится наверху стека, и копирует его в символьную переменную
//create stack
DynStack mystack;
//pushes elements to stack
for (int i=0; i<size; i++) {
if (array[i] == '(' || array[i] == '[') {
mystack.push( array[i] );
continue;
}
// Stack will remain empty until an
// an open character is reached.
// While empty, opening characters are missing
if ( mystack.isEmpty() ) {
if (array[i] == ')') {
closedP++;
}
else if ( array[i] == ']' )
;
ClosedB++;
}
//compares stack to elements in array.
// if the do not match, then an element is missing.
if (array[i] == ')') {
mystack.pop(c);
if ( c == '[' ) {
openP++;
}
}
if ( array[i] == ']' ) {
mystack.pop(c);
if (c == '(') {
OpenB++;
}
}
}
//if there is still an element left in the stack
//after checking the entire expression, it is either
//missing a ')' or a ']'
if (!mystack.isEmpty()) {
mystack.pop(c);
if (c == '(') {
closedP++;
}
else if (c == '[')
ClosedB++;
}
// cout<<"OP: "<<openP<<endl<<"CP: "<<closedP<<endl<<
// "OpenB "<<OpenB<<endl<<"CB: "<<ClosedB<<endl;
// cout<<"total: "<<totalmissing<<endl;
totalmissing=openP+closedP+OpenB+ClosedB;
//prints valid expression
if (totalmissing == 0) {
outfile<<math<<" "<< "=== "
<<"valid expression"<<endl;
}
//prints the amount of each element missing to output file
//if the number of missing elements is less than 6
if ( totalmissing >= 1 && totalmissing < 6 ) {
outfile<<math<<" "<< "=== "<<"missing "
<<"("<<openP<<") "<<"('s"<<" and "<<"("<<closedP<<") "<<")'s"
<<" and "<<"("<<OpenB<<") "<<"['s"<<" and "<<"("<<ClosedB
<<") "<<"]'s"<<endl;
}
// expression is missing 6 or more elements
if (totalmissing >= 6 || OpenB >=6
|| ClosedB>=6 ||openP >=6 || closedP >=6 ) {
outfile<<math<<" "<<"6 or more elements are missing"<<endl;
}
Учитывая мой ввод чего-то вроде этого:
a+(b/c)*abcd(efgh
(60+[efg]+[efm)
70+1]
)aphids(
]dkdjsfg-4tw[abds()
Я долженскажите пользователю, если выражение допустимо, а если нет, скажите, что отсутствует.Если пропущено более 6, я должен сказать им об этом.
Как вы увидите, основываясь на том, что я вам дал, мои выводы о том, что не так с предоставленными мною выражениями, неверны.
a+(b/c)*abcd(efgh 6 or more elements are missing
(60+[efg]+[efm) === missing (1) ('s and (1) )'s and (0) ['s and (0) ]'s
70+1] 6 or more elements are missing
)aphids( 6 or more elements are missing
]dkdjsfg-4tw[abds() 6 or more elements are missing
Любая помощь будет принята с благодарностью!