Odpowiedź:
#include <iostream>
#include <stack>
#include <algorithm>
#include <array>
bool canAddToStack(const char a) { //flaga czy mozemy dodać do stacku. Dodajemy jedynie operatory i nawiasy
static std::array<char, 6> toStack = {'+', '-', '*', '/', '(', ')'};
return std::find(toStack.begin(), toStack.end(), a) != std::end(toStack);
}
bool canBeMovedFromStackToResult(const char a) { //flaga operatorów, które możemy wyciągnąć ze stacku i dodać do wyniku
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) { //wyjmowanie za stacka dopóki nie trafimy na nawias otwierający
while (stack.top() != '(') {
if (canBeMovedFromStackToResult(stack.top())) {
res += stack.top();
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)) { //jeśli możemy dodać do stacka to dodajemy do stacka
stacked.push(ch);
if (std::isdigit(ch)) { //jeśli jest cyfra to dodajemy do wyniku
res += ch;
if (stacked.top() == ')') { //jeśli trafimy na nawias zamykający to zdejmujemy ze stacka dopóki nie natrafimy na nawias otwierający
dropFromStack(stacked, res);
std::cout << res << std::endl;
return 0;
Wyjaśnienie:
Zrobione to jest tak, że trzeba wszędzie dawać nawiasy plus nie ma zapisywania do pliku. Oczywiście też jest to zrobione w C++, a nie w pythonie
" Life is not a problem to be solved but a reality to be experienced! "
© Copyright 2013 - 2025 KUDO.TIPS - All rights reserved.
Odpowiedź:
#include <iostream>
#include <stack>
#include <algorithm>
#include <array>
bool canAddToStack(const char a) { //flaga czy mozemy dodać do stacku. Dodajemy jedynie operatory i nawiasy
static std::array<char, 6> toStack = {'+', '-', '*', '/', '(', ')'};
return std::find(toStack.begin(), toStack.end(), a) != std::end(toStack);
}
bool canBeMovedFromStackToResult(const char a) { //flaga operatorów, które możemy wyciągnąć ze stacku i dodać do wyniku
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) { //wyjmowanie za stacka dopóki nie trafimy na nawias otwierający
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)) { //jeśli możemy dodać do stacka to dodajemy do stacka
stacked.push(ch);
}
if (std::isdigit(ch)) { //jeśli jest cyfra to dodajemy do wyniku
res += ch;
}
if (stacked.top() == ')') { //jeśli trafimy na nawias zamykający to zdejmujemy ze stacka dopóki nie natrafimy na nawias otwierający
dropFromStack(stacked, res);
}
}
std::cout << res << std::endl;
return 0;
}
Wyjaśnienie:
Zrobione to jest tak, że trzeba wszędzie dawać nawiasy plus nie ma zapisywania do pliku. Oczywiście też jest to zrobione w C++, a nie w pythonie