Advertisement
Stoycho_KK

прост калкулатор

Mar 28th, 2021
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include<iostream>
  2. #pragma warning (disable:4996) //no errors with strcat
  3.  
  4. const int STR_MAX = 100;
  5.  
  6. bool isOperator(const char& c) {
  7.     return c == '+' || c == '-' || c == '*' || c == '/' || c == '=';
  8. }
  9.  
  10. int calculate(const char* str) {
  11.     int firstNumber = 0;
  12.     int secondNumber = 0;
  13.  
  14.     bool firstNumInput = true;
  15.  
  16.     int strSize = strlen(str);
  17.  
  18.     char prevSign;
  19.  
  20.     for (int i = 0; i < strSize; i++) {
  21.         if (!isOperator(str[i])) {
  22.             if (firstNumInput) {
  23.                 firstNumber *= 10;
  24.                 firstNumber += str[i] - '0';
  25.             }
  26.             else {
  27.                 secondNumber *= 10;
  28.                 secondNumber += str[i] - '0';
  29.             }
  30.         }
  31.         else {
  32.             if (firstNumInput) {
  33.                 firstNumInput = false;
  34.             }
  35.             else {
  36.                 switch (prevSign){
  37.                 case '+':
  38.                     firstNumber = firstNumber + secondNumber;
  39.                     secondNumber = 0;
  40.                     break;
  41.                 case '-':
  42.                     firstNumber = firstNumber - secondNumber;
  43.                     secondNumber = 0;
  44.                     break;
  45.                 case '*':
  46.                     firstNumber = firstNumber * secondNumber;
  47.                     secondNumber = 0;
  48.                     break;
  49.                 case '/':
  50.                     firstNumber = firstNumber / secondNumber;
  51.                     secondNumber = 0;
  52.                     break;
  53.                 default:
  54.                     std::cout << "Invalid operator!";
  55.                     return -1;
  56.                     break;
  57.                 }
  58.             }
  59.             prevSign = str[i];
  60.         }
  61.     }
  62.  
  63.     return firstNumber;
  64. }
  65.  
  66. int main() {
  67.     char str[STR_MAX];
  68.    
  69.     std::cin.getline(str, STR_MAX, '=');
  70.  
  71.     //dobavq ravno nakraq
  72.     strcat(str, "=");
  73.  
  74.     std::cout << calculate(str);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement