Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <stack>
- using namespace std;
- int calc(int*, int*, string);
- int reform(stack <string>*, string);
- double rebild(string s1, bool f1)
- {
- int i = 0;
- double result = 0;
- if (f1 == true)
- {
- while (s1[i] != '.') // 2141.1468 leng=9,
- {
- i++;
- }
- i--; //3
- int buf = i;
- for (int ind = 0; ind <= i; ind++)
- {
- switch (s1[ind])
- {
- case '1':
- result = result + 1 * pow(10, i);
- break;
- case '2':
- result = result + 2 * pow(10, i);
- break;
- case '3':
- result = result + 3 * pow(10, i);
- break;
- case '4':
- result = result + 4 * pow(10, i);
- break;
- case '5':
- result = result + 5 * pow(10, i);
- break;
- case '6':
- result = result + 6 * pow(10, i);
- break;
- case '7':
- result = result + 7 * pow(10, i);
- break;
- case '8':
- result = result + 8 * pow(10, i);
- break;
- case '9':
- result = result + 9 * pow(10, i);
- break;
- case '0':
- result = result + 0 * pow(10, i);
- break;
- }
- i--;
- }
- i = 0;
- for (int ind = buf + 2; ind <= s1.length() - 1; ind++)
- {
- switch (s1[ind])
- {
- case '1':
- result = result + 1 * pow(10, -(i + 1));
- break;
- case '2':
- result = result + 2 * pow(10, -(i + 1));
- break;
- case '3':
- result = result + 3 * pow(10, -(i + 1));
- break;
- case '4':
- result = result + 4 * pow(10, -(i + 1));
- break;
- case '5':
- result = result + 5 * pow(10, -(i + 1));
- break;
- case '6':
- result = result + 6 * pow(10, -(i + 1));
- break;
- case '7':
- result = result + 7 * pow(10, -(i + 1));
- break;
- case '8':
- result = result + 8 * pow(10, -(i + 1));
- break;
- case '9':
- result = result + 9 * pow(10, -(i + 1));
- break;
- case '0':
- result = result + 0 * pow(10, -(i + 1));
- break;
- }
- i++;
- }
- }
- else
- {
- int ind = 0;
- for (i = s1.length() - 1; i >= 0; i--) // 16724
- {
- switch (s1[i])
- {
- case '1':
- result = result + 1 * pow(10, ind);
- break;
- case '2':
- result = result + 2 * pow(10, ind);
- break;
- case '3':
- result = result + 3 * pow(10, ind);
- break;
- case '4':
- result = result + 4 * pow(10, ind);
- break;
- case '5':
- result = result + 5 * pow(10, ind);
- break;
- case '6':
- result = result + 6 * pow(10, ind);
- break;
- case '7':
- result = result + 7 * pow(10, ind);
- break;
- case '8':
- result = result + 8 * pow(10, ind);
- break;
- case '9':
- result = result + 9 * pow(10, ind);
- break;
- case '0':
- result = result + 0 * pow(10, ind);
- break;
- }
- ind++;
- }
- }
- return result;
- }
- int main()
- {
- std::string expr;
- std::cout << "Enter the mathematical expression" << std::endl;
- std::getline(std::cin, expr);
- std::cout << expr << std::endl;
- int AmountOp = 0, AmountBack = 0, AmountOut = 0;
- calc(&AmountOp, &AmountBack, expr);
- int d = expr.length() - AmountBack;
- // Operations[AmountOp + 1] = '\0';
- //Out[d + 1] = 0;
- cout << endl;
- stack <string> out;
- reform(&out, expr);
- while (!out.empty())
- {
- cout << out.top() << ' ';
- out.pop();
- }
- int a;
- cin >> a;
- system("pause");
- return 0;
- }
- int calc(int *n, int* back, string str)
- {
- for (int i = 0; i < str.length(); i++)
- {
- if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/')
- (*n)++;
- if (str[i] == ' ')
- (*back)++;
- }
- return 0;
- }
- int reform(stack<string>* out, string str)
- {
- //int i = 0, j = -1;
- //cout << endl;
- stack <char> op;
- for (int k = 0; k < str.length();)
- {
- bool flNum = false;
- string chislo = "";
- while (str[k] >= '0' && str[k] <= 9/*str[k] == '1' || str[k] == '2' || str[k] == '3' || str[k] == '4' || str[k] == '5' || str[k] == '6' || str[k] == '7' || str[k] == '8' || str[k] == '9' || str[k] == '0' || str[k] == '.'*/)
- {
- chislo += str[k];
- flNum = true;
- k++;
- }
- if (flNum)
- {
- out->emplace(chislo);
- continue;
- }
- if (str[k] == '*' || str[k] == '/')
- {
- while (op.top() == '*' || op.top() == '/') {
- out->emplace(to_string(op.top()));
- op.pop();
- }
- op.emplace(str[k]);
- k++;
- continue;
- }
- if (str[k] == '+' || str[k] == '-')
- {
- while (op.top() == '*' || op.top() == '/' || op.top() == '-' || op.top() == '+')
- {
- out->emplace(to_string(op.top()));
- op.pop();
- }
- op.emplace(str[k]);
- k++;
- continue;
- }
- if (str[k] == ' ')
- {
- k++;
- continue;
- }
- if (str[k] == '(')
- {
- op.emplace(str[k]);
- k++;
- continue;
- }
- if (str[k] == ')')
- {
- while (op.top() != '(')
- {
- out->emplace(to_string(op.top()));
- op.pop();
- }
- op.pop();
- k++;
- continue;
- }
- }
- while (op.empty() == false)
- {
- out->emplace(to_string(op.top()));
- op.pop();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement