コード例 #1
0
ファイル: IO.cs プロジェクト: RabotaDime/Examples-HackerRank
        //   In : One or more markers. Один или несколько маркеров.
        //   Метод только для входящих данных, так как для вывода нелогично выводить
        //   одновременно несколько серий данных.
        public IIOMultiMarkerQuery OneOf(string m1, params string[] markers)
        {
            var matcher = new CStringMatcher(m1, markers);

            //   До тех пор, пока в буфере есть входящие данные,
            //   и пока совпадение строк имеет "выжившие" маркеры,
            //   мы продолжаем анализ.
            while (Buffer.Peek(out char c) && (matcher[c] > 0))
            {
                matcher.Continue(c);

                //   Если есть совпавшие маркеры.
                if (matcher.MatchCount > 0)
                {
                    //   Буфер съедает совпавший маркер и переходит дальше.
                    Buffer.Pop(matcher.FirstMatch.Length);

                    return(new QMultiMarker
                    {
                        MatchedMarker = matcher.FirstMatch,
                        MarkerSet = new string[] { matcher.FirstMatch },
                        Success = true,
                    });
                }
            }

            return(new QMultiMarker
            {
                MatchedMarker = string.Empty,
                MarkerSet = new string[] { },
                Success = false,
            });
        }
コード例 #2
0
ファイル: IO.cs プロジェクト: RabotaDime/Examples-HackerRank
        //   Более глубокая версия функции OneOf. Возвращает все маркеры,
        //   которые совпали, чтобы можно было произвести анализ.
        public IIOMultiMarkerQuery OneOfDeep(string m1, params string[] markers)
        {
            var matcher = new CStringMatcher(m1, markers);

            //   До тех пор, пока в буфере есть входящие данные,
            //   и пока совпадение строк имеет "выжившие" маркеры,
            //   мы продолжаем анализ.
            while (Buffer.Peek(out char c) && (matcher[c] > 0))
            {
                matcher.Continue(c);
            }

            return(new QMultiMarker
            {
                MatchedMarker = matcher.FirstMatch,
                MarkerSet = matcher.MatchResult.ToArray(),
                Success = (matcher.MatchCount > 0),
            });
        }