• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Задача - реализовать конечный автомат по разбору строки, она сделана

  • Автор темы Автор темы Tronof
  • Дата начала Дата начала
T

Tronof

Требовалось на С/С++ реализовать конечный автомат по разбору введенной строки. Я это сделал но есть проблемы с выводом.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Задание"</div></div><div class="sp-body"><div class="sp-content">Входные данные: Вводится строка, по виду представляющая собой команду из командной строки
Правила:
Вводится "команда" и еще дополнительно можно ввести "параметры команды", "ключи" и "параметры ключей".
Последовательность: Команда, параметры команды, ключи, параметры ключей.
Команда вводится обязательно, остальное по желанию.
Команда состоит из любой последовательности латинских букв (A-Z, a-z).
Параметры команды и параметры ключей состоят из любых символов, кроме "<", ">", ":", "?".
Параметров команды и параметров ключей может быть несколько.
Перед ключом должно стоять тире. Тире и сам ключ пишутся слитно
Ключи заранее определены:
-a (обязательно с параметром)
-r (обязательно с параметром)
-p (обязательно с параметром)
-n (либо с параметром либо без параметра)
-m (либо с параметром либо без параметра)
-l (либо с параметром либо без параметра)
-s (либо с параметром либо без параметра)
-c (обязательно без параметра)
Команда, параметры команды, ключи, параметры ключей должны быть разделены минимум одним пробелом
Параметры команды и параметры ключей могут писаться внутри кавычек. Все, что написано внутри кавычек считается единым параметром. Внутри кавычек могут встречаться пробелы.
Пробелы реализованы в виде знака подчеркивания: _
Выходные данные:
Автомат должен определить:
1) соответствует ли введенная строка правилам
2) что из введенного команда, что параметры команды, что ключи, что параметры ключей

Пример:
Ввод:
hg_"ctr"_-a_pt_s_"s_dv"_-r_"c"
Вывод:
Все верно!
hg - команда
"ctr" - параметр команды
-a - ключ
pt - параметр ключа
s - параметр ключа
"s_dv" - параметр ключа
-r - ключ
"c" - параметр ключа

Код:

У меня почему то не выполняются строки кода: 338, 354, 356, 383, 385, 405, 419, 426.
Такое чувство что не выполняются условия. Это как раз тот самый вывод, которой показывает где команда, где ключи, где параметры.
Если бы эти строки выполнялись, задача была бы решена.

Вопрос: Почему не выполняются эти строки кода?
Как заставить их выполняться?
Буду очень благодарен тем, кто хоть чем то поможет.
 
Используй отладочный вывод, чтобы понять логику программы.

также читать про
 
Rififi, не могли бы вы по-подробнее объяснить - как использовать отладочный вывод?
 
как использовать отладочный вывод?

в важных с твоей точки зрения участках программы расставить вызовы функций printf/std::cout, которые выводят значения переменных на консоль.
по мере выполнения программы, сравнивать полученные значения с ожидаемыми.
 
в важных с твоей точки зрения участках программы расставить вызовы функций printf/std::cout, которые выводят значения переменных на консоль
А так вот как это правильно называется! Я когда применял этот метод, не задумывался что это общепринятая практика, и даже свое отдельное название имеет ;)

Кстати в MS Visual Studio нажав F11 можно вызвать отладочный режим и так же смотреть все эти значения
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!