Odpowiedź :
Odpowiedź:
#include <iostream>
#include <stack>
#include <algorithm>
#include <array>
bool canAddToStack(const char a) {
static std::array<char, 6> toStack = {'+', '-', '*', '/', '(', ')'};
return std::find(toStack.begin(), toStack.end(), a) != std::end(toStack);
}
bool canBeMovedFromStackToResult(const char a) {
static std::array<char, 4> fromStack = {'+', '-', '*', '/'};
return std::find(fromStack.begin(), fromStack.end(), a) != std::end(fromStack);
}
void dropFromStack(std::stack<char> &stack, std::string &res) {
while (stack.top() != '(') {
if (canBeMovedFromStackToResult(stack.top())) {
res += stack.top();
}
stack.pop();
}
stack.pop();
}
int main() {
std::string s;
std::cout << "Podaj wyrazenie: " << std::endl;
std::cin >> s;
std::stack<char> stacked;
std::string res;
for (const char &ch : s) {
if (canAddToStack(ch)) {
stacked.push(ch);
}
if (std::isdigit(ch)) {
res += ch;
}
if (stacked.top() == ')') {
dropFromStack(stacked, res);
}
}
std::cout << res << std::endl;
return 0;
}
Wyjaśnienie:
Ja kiedyś np. zrobiłem podstawową wersję do przeliczenia wyrażenia na ONP(Odwrotną Notację Polską) w wykorzystaniem stosu