標題:
數學表達式的字符串 求值
[打印本頁]
作者:
may
時間:
2023-5-10 15:44
標題:
數學表達式的字符串 求值
3. 給定一個表示數學表達式的字符串,例如“(((1+(2*3))+4)-5)”。
輸入將僅包含:數字 0-9運算符“+”、“-”、“*”、“/” 括弧 ”(”,”)” 完成 C 函數 int evaluate() 以評估表達式並返回結果。 您可以假設輸入格式正確並且不包含任何語法錯誤。 您應該使用數組和指針來處理輸入字符串。
#include <stdio.h>
#include<stdlib.h>
#define MAX_EXPRESSION_LENGTH 100
int main() {
char expression[MAX_EXPRESSION_LENGTH];
printf("Enter the expression: ");
fgets(expression, MAX_EXPRESSION_LENGTH, stdin);
int result = evaluate(expression);
printf("Result: %d\n", result); return 0;
}
int evaluate(char *expression) {
//Write your code here
作者:
may
時間:
2023-5-10 17:12
標題:
計算器完整版_C++
#include <iostream>
#include <stack>
#include <string>
#include <unordered_map>
using namespace std;
stack<int> num;
stack<char> op;
//優先級表
unordered_map<char, int> h{ {'+', 1}, {'-', 1}, {'*',2}, {'/', 2} };
void eval()//求值
{
int a = num.top();//第二操作數
num.pop();
int b = num.top();//第一操作數
num.pop();
char p = op.top();//運算符
op.pop();
int r = 0;//結果
//計算結果
if (p == '+') r = b + a;
if (p == '-') r = b - a;
if (p == '*') r = b * a;
if (p == '/') r = b / a;
num.push(r);//結果入stack
}
int main()
{
string s;//讀入表達式
cin >> s;
for (int i = 0; i < s.size(); i++)
{
if (isdigit(s[i]))//數字入
{
int x = 0, j = i;//計算數字
while (j < s.size() && isdigit(s[j]))
{
x = x * 10 + s[j] - '0';
j++;
}
num.push(x);//數字入stack
i = j - 1;
}
//左括號無優先級,直接入stack
else if (s[i] == '(')//左括號入stack
{
op.push(s[i]); }
//括號特殊,遇到左括號直接stack,遇到右括號計算括號裡面的
else if (s[i] == ')')//右括號
{
while(op.top() != '(')//一直計算到左括號
eval();
op.pop();//左括號出stack
}
else
{
while (op.size() && h[op.top()] >= h[s[i]])//待入stack運算符優先級低,則先計算
eval();i
op.push(s[i]);//操作符入stack
}
}
while (op.size()) eval();//剩餘的進行計算
cout << num.top() << endl;//輸出结果
return 0;
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2