Проверка введённой строки соответствию маске-ввода - C#
Формулировка задачи:
Есть строка, состоящая из 4-х различных букв ("a","b","c","d")
Есть маска, которой должны соответствовать введённые строки: a+b*|c?d
где
- a+ - может быть 1 или 2 символа
- b* - может быть любое количество символов , начиная с 1
- с? - может быть 1 или 0 символов
- d - 1 символ
- b*|c? - логическое "или": Или в строке может быть любое количество букв "b", либо 1 или 0 символов "с".
- aabbbd
- acd
- ad
- aad
- abbbbbbbbbbbbd
Решение задачи: «Проверка введённой строки соответствию маске-ввода»
textual
Листинг программы
using System; namespace ConsoleApplication221 { class Program { static void Main(string[] args) { //описываем переходы var steps = new Step[] { new Step('a', 0, 1), new Step('a', 1, 2), new Step('b', 1, 3), new Step('b', 2, 3), new Step('b', 3, 3), new Step('c', 1, 4), new Step('c', 2, 4), new Step('d', 1, 5), new Step('d', 2, 5), new Step('d', 3, 5), new Step('d', 4, 5), new Step('$', 5, -1) }; //задаем входную строку var str = Console.ReadLine(); //проверяем строку if (StateMachine.Check(str, steps)) Console.WriteLine("Строка подходит"); else Console.WriteLine("Строка НЕ подходит"); Console.ReadLine(); } } public static class StateMachine { public static bool Check(string str, Step[] steps) { //начальное состояние int state = 0; //добавляем символ конца str = str + "$"; //проверяем переходы foreach (var c in str) { var found = false; foreach (var step in steps) if (step.Accept(c, ref state)) { //сработал переход found = true; break; } if (!found) return false;//ни один переход не сработал if (state == -1) return true;//достигнуто конечное состояние } //символы закончились, а конечное состояние - не достигнуто return false; } } // Переход конечного автомата public struct Step { char @char; int fromState; int toState; public Step(char c, int from, int to) { @char = c; fromState = from; toState = to; } //срабатывает ли переход для данного символа и данного состояния? public bool Accept(char c, ref int state) { if (c == @char && state == fromState) { state = toState; return true; } return false; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д