




全文預覽已結束
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C+中要表達四則運算,最主要就是字符轉換的問題,我提供的思路如下一個string變量中的字串是這種形式的,其中每一個都是字符變量String(34+6)*5=要怎么變成我們轉化成能計算的式子呢?我是這樣想的:先將string中的每個字符都配上標識,表明它是數值還是符號(1代表符號,0代表數值)(34+6)*5=100101101這樣我就會知道每一位對應的是什么然后我們重新設置一個整形數組newstr來存放這個string關于這個轉化,我的想法如下:如果本來是符號,則轉化成數值存入newstr并標識上1表明他是運算符;如果有兩個0的情況,說明他們應該是一個數字,則把他們合并存入newstr并標識上0;然后就會得到如下的兩個數組(34+6)*5=4034436414256110101101第二行是newstr中的值第三行是標識數組中的值然后呢之后轉化后綴表達式就是數據結構的內容了看看書就可以啦這是目前我想出來的還算過的去的想法了,如果有大神,請別吐槽,一個晚上的結晶啊#include #include using namespace std;bool IsChar(char c)if (0=c&c=9) return 0;else return 1;int main()string s;/存儲用戶輸入的式子cout 請輸出表達式(務必以等號結束)endl;cout s;int newstr100;/用來存儲轉化后的表達式int arr100;/標志數組:用來標識newstr中每個元素對應的是數據還是運算符,若是數據,對應位置為0,反之為1int i = 0;/對s中的內容進行索引while(si!=)arri = IsChar(si); i+;/如果是字符,arr對應位置標1;數據則標0i = 0;/對s中的內容進行索引int n = 0; /存儲新的字符串的字符下標while(si!=)/此循環將s中字符串轉化成數值形式存儲在newstr中,并用arr數組標識每一位是數據還是字符if (arri=1)/如果是字符,轉化成數值后直接放進newstr,并在arr的對應位置標識上1newstrn = int(si); arrn = 1; n+; i+;else/如果不是字符,轉化成十進制數據后存入newstr,并在arr對應位置標識上0if(i = 0)/如果第一位就是數值,直接存入newstrn = int(si) - 48;arrn = 0;n+; i+;else if(arri-1=0)/如果之前一個字符也是數字,將此數據與之前數據合并,例如字符串“90”轉化成整型90后存入,并標識上0newstrn-1 = 10 * newstrn-1 + int(si) - 48;arrn-1 = 0;i+;elsenewstrn = int(si) - 48;arrn = 0;n+; i+;newstrn = -1;arrn=1;/新字符串結束標記/*/此部分用來打印轉化后的newstr及其標識數組arrint i = 0;while(newstri!=-1)coutnewstrit;i+;coutendl;i = 0;while(newstri!=-1)coutarrit;i+;coutendl;*/i = 0;/用來索引newstr中的數據int stack1100;/用來存儲后綴表達式int k=0;/stack1的索引int stack2100;/用來臨時存儲符號int m=0;/stack2的索引while(newstri!=-1)/此循環將newstr轉化成后綴表達式并存入stack1中;轉化步驟參考數據結構棧if(arri=0)stack1k=newstri;arrk=0;k+;i+;elseif(m=0 | newstri=40)/40代表左括號,可直接放入stack2;stack2m=newstri;m+;i+;elseswitch(newstri)case 41: while(stack2m-1!=40) /)stack1k=stack2m-1;arrk=1;m-;k+;m-;i+;break;case 43:while(stack2m-1!=40 & m!=0)/+stack1k=stack2m-1;arrk=1;m-;k+;stack2m=newstri;m+;i+;break;case 45:while(stack2m-1!=40 & m!=0)/-stack1k=stack2m-1;arrk=1;m-;k+;stack2m=newstri;m+;i+;break;case 42:while(stack2m-1=42 | stack2m-1=47) & m!=0 )/*stack1k=stack2m-1;arrk=1;m-;k+;stack2m=newstri;m+;i+;break;case 47:while(stack2m-1=42 | stack2m-1=47) & m!=0)/stack1k=stack2m-1;arrk=1;m-;k+;stack2m=newstri;m+;i+;break;for(m;m!=0;m-)/將stack2中剩余的符號依次出棧存入stack1;stack1k+=stack2m-1;arrk-1=1;stack1k=-1;/stack1的結束標記,也就是后綴表達式的結束標記k = 0;/打印后綴表達式cout 后綴表達式為:;while(stack1k!=-1)if(arrk=0)coutstack1k ;elsecoutchar(stack1k) ;k+;coutendl;int stack3100;/臨時棧,計算后綴表達式時用到k = 0;i = 0;while(stack1i!=-1)if(arri=0)stack3k=stack1i;k+;i+;elseswitch(stack1i)case 43:stack3k-2=stack3k-1+stack3k-2;k-;i+;break;case 45:stack3k-2=stack3k-1-stack3k-2;k-;i+;brea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業園區規劃設計思路
- 工業排污處理的智能化改造與物聯網
- 工業安全與防護在智能車間的實施要點
- 工業污染源的環境監測與治理策略
- 工業機器人與節能生產技術探討
- 工業機器人技術的進步與應用領域
- 工業綠色制造技術
- 工業物聯網的構建與優化
- 工業級智能穿戴設備的應用與發展趨勢
- 工業節能減排技術解決方案
- 探析3-6年級小學生校園排斥:現狀、歸因與防范路徑
- 人教版(2024)七年級地理下學期期末達標測試卷A卷(含解析)
- 《插花藝術》教材任務-項目三 任務二切花裝飾設計
- 公共組織績效評估-形考任務三(占10%)-國開(ZJ)-參考資料
- 醫學影像讀片試題及答案
- 2025年廣東高中學業水平合格性考試化學試卷試題(含答案解析)
- 2025年突發流行性傳染性疾病應急演練方案及總結
- 安能快遞加盟合同協議
- 2024年大學生就業力調研報告-智聯招聘-202405
- 防靜電地膠板施工工藝及技術方案、措施
- 成人ICU患者外周動脈導管管理專家共識解讀
評論
0/150
提交評論