// Проверка, является ли введенный символ цифрой static bool IsFigure(char SymbolToCheck) { return(FigureSigns.Contains(SymbolToCheck)); }
// Преобразование выражения к виду обратной польской записи public static string TranslateExpression(string Expression) { // Стек для хранения операторов на время преобразования выражения Stack <string> TranslationStack = new Stack <string>(); // Строка, содержащая преобразованное выражение string RPNExpression = ""; // Пока не закончится исходное выражение while (Expression != "") { // Берем первый токен выражения string Token = GetFirstToken(Expression); Expression = Expression.Remove(0, Token.Length).TrimStart(' '); // Токен - знак операции if (OperationSigns.Contains(Token)) { // Элемент на вершине стека - знак операции большего или равного приоритета if ((TranslationStack.Count > 0) && (OperationSigns.Contains(TranslationStack.Peek())) && (CheckPriority(Token, TranslationStack.Peek()))) { // Выталкиваем токен с вершины в выходную строку RPNExpression += TranslationStack.Pop() + " "; } // Помещаем токен в стек TranslationStack.Push(Token); } else // Токен - число if (FigureSigns.Contains(Token[0])) { // Добавляем токен в выходную строку RPNExpression += Token + " "; } else // Токен - ( if (Token == "(") { // Помещаем токен в стек TranslationStack.Push(Token); } // Токен - ) else if (Token == ")") { // Пока не дойдем до токена ( while (TranslationStack.Peek() != "(") { // Выталкиваем токен с вершины в выходную строку RPNExpression += TranslationStack.Pop() + " "; } // Удаялем токен ( TranslationStack.Pop(); } } // Выталкиваем из стека в выходную все оставшиеся элементы while (TranslationStack.Count > 0) { RPNExpression += TranslationStack.Pop() + " "; } return(RPNExpression); }