關於字串表示式求值

2021-09-24 21:10:28 字數 2333 閱讀 4239

由於自身思維不夠活躍,思考問題邏輯不夠清晰,所以小弟的師傅給小弟我布置了個作業,字串表示式求值,以此希望達到鍛鍊我思維邏輯能力的目的。

歷時14天,完成作業,相關知識以及技術並不高深,目的在於鍛鍊邏輯思維能力。在此也想跟有相關需要的同學們分享下解題思路,有不足之處也希望大家不吝賜教,指點出來。謝謝。

解決該問題時首先要解決判斷運算子優先順序問題,後來了解到字尾表示式(即逆波蘭表示式)後,決定先將表示式分解成逆波蘭表示式 ,然後再根據每個運算子取出數字進行相應的運算。計算到最後即為表示式的值

涉及string字串、動態陣列vector、逆波蘭表示式(網上由相應的解析,書上並沒有出現),迭代器(主要起取出以及作轉換範圍使用)的相關知識。

低配版(僅支援0-9的正整數計算,可以計算的運算子包含+ - * / % ^ & |)

**如下:`//原型: double exper(const char * expr);

//使用: double retval = expr(「1*2+(10/4)-3^1234」);

#include

#include

#include

#include

#include

#include

using namespace std;

bool gettruefalse(char a) //判斷當前符號是否為符號

int getpriority(char c)

string getnbl(string str)

else if (getpriority(str[a]) == 0) //是)嗎

if ((getpriority(*(flag.end() - 1)) == 6))//將(去掉

}else if (getpriority(str[a]) <= getpriority(*(flag.end() - 1))) //當前符號優先順序小於或等於符號容器最後乙個符號

}else //如果當前字元不為符號(即為數字或小數點)

}}//舊字串清空後,將臨時存放點的字串依次取出放入新字元中

while (flag.size() != 0)

return ok;int jisuan(int a, char b, int c) //根據符號取數字進行相應的計算

int getcount(string nbl)

else //數字時 壓人數字容器

}return *(nums.end() - 1); //容器最後一位數即為結果

}int main()

int getpriority(char c) //優先順序排列

void getvariant(string &str)

else if ((str[a] == '-') && (gettruefalse(str[a - 1]) == 1) && (str[a - 1] != ')')) //找到-並確認當前是否為符號

}for (a = 0; a < str.size(); a++) //將原字串中的||、&&用相應的識別符號替代

if (str[a] == '&' && str[a + 1] == '&')

}}string getnbl(string str)

else if (str[a] == ')') //如果為) 不壓入,彈出容器符號 直到遇到(

flag.erase(flag.end() - 1);//刪掉容器中的(

a++;//跳過')'符號

}else if (getpriority(str[a]) <= getpriority(*(flag.end() - 1)))//當前符號優先順序小於或等於符號容器最後乙個符號

} else //不為符號,則遍歷字串找到符號

num = getanswer(*(nums.end() - 2), nbl[a], *(nums.end() - 1));//彈出數字容器的2個數字 並根據符號去計算這2個數字

nums.erase(nums.end() - 2, nums.end());//計算後去掉這2個數字,並將結果重新放入容器中

nums.push_back(num);

a++;//遍歷下乙個字元

} else if (nbl[a] == ' ')

else

{ b = a;//記錄開始找空格的位置

while (a執行結果:

字串 表示式求值

不曾想到我居然還會寫這種部落格,然而自己是真的對這些模擬很噁心。這簡單,可以遞迴求解,遇到乙個符號,直接往下遞迴。這裡我的處理是有空格的,因此呢可以使用atof將字串轉化了double,atoi好像是轉化為int。include include include include include inc...

字串求值 中綴表示式轉換為字尾表示式

中綴表示式轉換為字尾表示式 1.建立棧 2.從左向右順序獲取中綴表示式 a.數字直接輸出 b.運算子 情況一 遇到左括號直接入棧,遇到右括號將棧中左括號之 棧的運算子全部彈棧輸出,同時左括號出棧但是不輸出。情況二 遇到乘號和除號直接入棧,直到遇到優先順序比它更低的運算子,依次彈棧。情況三 遇到加號和...

shell 字串 表示式

在shell程式設計中,經常要處理一些字串變數。比如,計算長度啊 擷取子串啊 字元替換啊等等,常常要用到awk expr sed tr等命令。下面給大家介紹個簡單的字串處理方法,用不著巢狀複雜的子命令。計算value字串的字元數量。或 刪除value字串中以分隔符 匹配的右邊字元,保留左邊字元。或 ...