Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 기본 계산기

<시간/>

기본 표현식 결과를 찾을 하나의 기본 계산기를 생성한다고 가정합니다. 표현식은 여는 괄호와 닫는 괄호, 더하기 또는 빼기 기호 및 공백을 포함할 수 있습니다.

따라서 문자열이 "5 + 2 - 3"과 같으면 결과는 7이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ret :=0, 부호 :=1, num :=0, n :=s의 크기

  • 하나의 스택 정의

  • i를 초기화하기 위해 :=0, i

    • i

      크기의 배열 x =s를 정의합니다.
    • x>='0'이고 x <='9'이면,

      • 숫자 =숫자 * 10

      • 숫자 =숫자 + (x - '0')

    • 그렇지 않으면 x가 '('와 같을 때 -

      • ret =ret + (기호 * 숫자)

      • st에 ret 삽입

      • st에 기호 삽입

      • ret :=0, 부호 :=1, 숫자 :=0

    • 그렇지 않으면 x가 ')'와 같을 때 -

      • ret =ret + (기호 * 숫자), 부호 :=1, 숫자 :=0

      • ret =ret * st의 최상위 요소

      • st에서 항목 삭제

      • ret =ret + st의 최상위 요소

      • st에서 항목 삭제

    • 그렇지 않으면 x가 '+'와 같을 때 -

      • ret =ret + (기호 * 숫자), 부호 :=1, 숫자 :=0

    • 그렇지 않으면 x가 '-'와 같을 때 -

      • ret =ret + (기호 * 숫자), 부호 :=- 1, 숫자 :=0

  • num이 0이 아니면

    • 렛 =렛 + 부호 * 숫자

  • 리턴 렛

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int calculate(string s) {
      int ret = 0;
      int sign = 1;
      int num = 0;
      int n = s.size();
      stack <int> st;
      for(int i = 0; i < n; ++i){
         char x = s[i];
         if(x >= '0' && x <= '9'){
            num *= 10;
            num += (x - '0');
         }
         else if(x == '('){
            ret += (sign * num);
            st.push(ret);
            st.push(sign);
            ret = 0;
            sign = 1;
            num = 0;
         }
         else if(x == ')'){
            ret += (sign * num);
            sign = 1;
            num = 0;
            ret *= st.top();
            st.pop();
            ret += st.top();
            st.pop();
         }
         else if(x == '+'){
            ret += (sign * num);
            sign = 1;
            num = 0;
         }
         else if(x == '-'){
            ret += (sign * num);
            sign = -1;
            num = 0;
         }
      }
      if(num){
         ret += sign * num;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.calculate("5 + 2 - 3"));
}

입력

"5 + 2 - 3"

출력

4