Функция приоритета - PullRequest
2 голосов
/ 23 января 2011

Я пытаюсь написать функцию, которая входит в мою основную программу, которая будет сравнивать приоритет операторов, вводимых пользователем.Функция будет искать следующие операторы:

+, -, *, / с *, /, имеющими наивысший приоритет, и +, -имеющий самый низкий приоритет.

Операторы с наименьшим приоритетом идут внизу стека, а операторы с наивысшим приоритетом - вверху стека.Так что, если пользователь вводит +-*/, в терминале должно отображаться */+-.

Есть идеи, как мне поступить?

Ответы [ 2 ]

4 голосов
/ 23 января 2011

Просто отсортируйте их, используя std::sort с пользовательским предикатом.

int precedence(char op)
{
    if (op == '*' || op == '/') return 0;
    return 1;
}

bool comparePrecedence(char a, char b)
{
    return precedence(a) < precedence(b);
}

int main()
{
    char input[] = "+-/";
    std::sort(input, input + 3, &comparePrecedence);
}

Очевидно, что вы можете добавлять другие операторы, просто добавляя их в функцию precedence.

4 голосов
/ 23 января 2011

Читайте все операторы в std::string.Напишите функцию следующего типа:

bool is_higher_precedence(char lhs, char rhs);

Эта функция должна возвращать, имеет ли lhs более высокий приоритет, чем rhs.

Затем вы можете использовать эту функцию в качестве параметра функтора std::sort для сортировки операторов по приоритету.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...