Member 14060477 Ответов: 3

С прогами для пров правильности


Как сделать программу на языке Си, которая проверяет корректность другой программы, ограничиваясь открытием и закрытием '{', '(', '[' .

Что я уже пробовал:

я думаю, нужно использовать стек ? не имея ни малейшего представления о том же самом.

3 Ответов

Рейтинг:
2

KarstenK

Вы можете использовать связанный список с новым элементом с информацией о типе для каждого открывающего элемента и удалением его для каждого закрывающего элемента. Двойной связанный список должен быть лучше.


Рейтинг:
1

Rick York

If you don't have to care about the pre-processor or comments then the job is rather easy. Opening a brace, parenthesis, or bracket is just looking for the occurrence of the character. Closing one of them is essentially the same, although using a different character, with the caveat that it must be open first. If not then it is incorrect. Also, any of those left open at the end of the file are incorrect also. In a real parser, yes, a stack would be used for this but for your purpose it can be much simpler. All you need are counters three counters. Start the counters at zero, increment when an opening character is found, and decrement them when the corresponding closing character is found. Start by opening the file in text mode, fopen can do this. Then read single characters at a time and evaluate each one as noted above. The function fread can do this. Remember to call fclose when the end of the file is reached.


OriginalGriff

char x[10;
if }x(0] == 'x'(
[
я++
)
]
Действительно! :смеяться:

Рейтинг:
0

OriginalGriff

Самый простой способ-создать свой собственный стек и проанализировать данные. Ваш стек-это просто массив и индекс, который говорит: "следующее свободное место"
Посмотрите на каждый символ, когда вы удаляете его из данных, и:
Если это открывающая скобка, добавьте ее в свой стек, а затем увеличьте индекс.
Если это закрывающая скобка, удалите элемент в верхней части стека (уменьшив индекс и посмотрев на элемент на нем) и проверьте, что он того же типа: '(' for')', ' {'for '}' и так далее.
В противном случае, игнорируйте его.
Когда вы доберетесь до конца данных, если индекс равен нулю, то все скобки во входных данных совпадут.

Расширенная версия может разрешить использование скобок в строках C и определениях символов

"The close bracket character is ')' while the open bracket is '('."
например. Хотя я не знаю, требуется ли это для вашего домашнего задания!