Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เครื่องคิดเลขพื้นฐานในภาษา C++


สมมติว่าเราต้องการสร้างเครื่องคิดเลขพื้นฐานหนึ่งเครื่องที่จะหาผลลัพธ์ของนิพจน์พื้นฐาน นิพจน์สามารถใส่วงเล็บเปิดและปิด บวกหรือลบสัญลักษณ์และช่องว่าง

ดังนั้นหากสตริงเป็นแบบ “5 + 2 - 3” ผลลัพธ์จะเป็น 7

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ret :=0, sign :=1, num :=0, n :=size of s

  • กำหนดหนึ่งสแต็ก st

  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน

    • กำหนดอาร์เรย์ x =s ขนาด i

    • ถ้า x>='0' และ x <='9' แล้ว

      • นัม =นัม * 10

      • num =num + (x - '0')

    • มิฉะนั้นเมื่อ x เหมือนกับ '(' แล้ว −

      • ret =ret + (เครื่องหมาย * num)

      • ใส่ ret ลงใน st

      • ใส่เครื่องหมายลงใน st

      • ret :=0, sign :=1, num :=0

    • มิฉะนั้นเมื่อ x เหมือนกับ ')' ดังนั้น −

      • ret =ret + (เครื่องหมาย * num), เครื่องหมาย :=1, num :=0

      • ret =ret * องค์ประกอบด้านบนของ st

      • ลบรายการออกจาก st

      • ret =ret + องค์ประกอบด้านบนของ st

      • ลบรายการออกจาก st

    • มิฉะนั้นเมื่อ x เหมือนกับ '+' แล้ว −

      • ret =ret + (เครื่องหมาย * num), เครื่องหมาย :=1, num :=0

    • มิฉะนั้นเมื่อ x เหมือนกับ '-' แล้ว −

      • ret =ret + (เครื่องหมาย * num), เครื่องหมาย :=- 1, num :=0

  • ถ้า num ไม่ใช่ศูนย์ ดังนั้น

    • ret =ret + เครื่องหมาย * num

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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