Взорвать шаблон в C#
Как я могу взорвать шаблон в c#. Используя заданный вход и выводя заданный результат с помощью рекурсии.
The code here is unfinished because I had second thoughts about my logic. The idea is to walk through each character and decide if it was a number, or open or close parenthesis and save that information into a string, using the number to repeat what is in the parenthesis. and alowing for iteration in the event that another statement is inside the parenthesis. For example : 2(ab)16(cd)3(a4(bc)d) would equate to : ABABCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDABCBCBCBCDABCBCBCBCDABCBCBCBCD
Что я уже пробовал:
static string ExplodeString(string holder) { bool firstRun = true; int c = 0; string holderStr = ""; int numOpen = 0; int numClose = 0; string numBuilder = ""; int rptNum = 0; string holderTmp = ""; int numOpenBraces = 0; string finalStr = ""; int numCloseBraces = 0; if (holder.Contains("(")) { int num = 4; //buffer number of chars to process for first parenthese while (num >0 || numOpen > numClose) { if (char.IsNumber(holder[c]) && numOpen == 0) { numBuilder += holder[c]; int.TryParse(numBuilder, out rptNum); Console.WriteLine(numBuilder); } else if (holder[c].Equals('(')) { Console.WriteLine("Open found!"); numOpen++; if (numOpen > 1) { holderStr += holder[c]; } } else if (holder[c].Equals(')')) { Console.WriteLine("Close found!"); numClose++; if (numOpen > 1) { holderStr += holder[c]; } } else { Console.WriteLine("Building string..."); holderStr += holder[c]; } c++; num--; } finalStr = String.Concat(Enumerable.Repeat(holderStr,rptNum)); Console.WriteLine(finalStr); while (finalStr.Contains('(')) { finalStr = ExplodeString(finalStr); } } Console.WriteLine(finalStr); return finalStr; }
Patrice T
В чем же вопрос?
stvn1337
Как я могу взорваться, сказал шаблон имто результата с помощью итераций в C#
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
BillWoodruff
Вы создали формат, в котором находится строка ? Это что, домашнее задание ? Знакомы ли вы с рекурсией или с использованием стековой структуры для ее реализации ?
stvn1337
Это не домашнее задание, это реальная проблема, над которой я работаю в качестве побочного проекта для малого бизнеса. Я знаком с рекурсией, но мне трудно обернуть свою голову вокруг этой проблемы.
stvn1337
Кроме того, это некоммерческий проект.
BillWoodruff
Привет, Не волнуйся, здесь много людей задают вопросы о текущей коммерческой работе.
Вы же понимаете, что вам нужно будет сделать эквивалент рекурсивного спуска синтаксического анализа ... предполагая, что ваш источник может "гнездиться" на любом количестве уровней глубоко.
Примеры таких парсеров есть здесь и на StackOverFlow.
stvn1337
Я заглянул в примеры рекурсивного парсера спуска. Мне понадобится больше времени, чтобы изучить их, так как они довольно сложны.
Richard MacCutchan
Это просто вопрос разбора каждого выражения. Захватывайте все символы, пока не встретите открытую скобку; это и есть счет. Затем захватите все символы, пока не встретите близкую скобку; это последовательность символов. Учитывая эти два поля, генерировать последовательности очень просто. Затем вы переходите к следующему выражению, пока не дойдете до конца текста.
BillWoodruff
Привет, Ричард, имхо, рекурсия, необходимая здесь, делает его более сложным.
Richard MacCutchan
Верно, но основная идея все та же.
Maciej Los
Проверьте это для синтаксического анализа выражений: Механизм вычислений для .NET.