C四則運算中的字符轉(zhuǎn)換想法.doc_第1頁
C四則運算中的字符轉(zhuǎn)換想法.doc_第2頁
C四則運算中的字符轉(zhuǎn)換想法.doc_第3頁
C四則運算中的字符轉(zhuǎn)換想法.doc_第4頁
C四則運算中的字符轉(zhuǎn)換想法.doc_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C+中要表達(dá)四則運算,最主要就是字符轉(zhuǎn)換的問題,我提供的思路如下一個string變量中的字串是這種形式的,其中每一個都是字符變量String(34+6)*5=要怎么變成我們轉(zhuǎn)化成能計算的式子呢?我是這樣想的:先將string中的每個字符都配上標(biāo)識,表明它是數(shù)值還是符號(1代表符號,0代表數(shù)值)(34+6)*5=100101101這樣我就會知道每一位對應(yīng)的是什么然后我們重新設(shè)置一個整形數(shù)組newstr來存放這個string關(guān)于這個轉(zhuǎn)化,我的想法如下:如果本來是符號,則轉(zhuǎn)化成數(shù)值存入newstr并標(biāo)識上1表明他是運算符;如果有兩個0的情況,說明他們應(yīng)該是一個數(shù)字,則把他們合并存入newstr并標(biāo)識上0;然后就會得到如下的兩個數(shù)組(34+6)*5=4034436414256110101101第二行是newstr中的值第三行是標(biāo)識數(shù)組中的值然后呢之后轉(zhuǎn)化后綴表達(dá)式就是數(shù)據(jù)結(jié)構(gòu)的內(nèi)容了看看書就可以啦這是目前我想出來的還算過的去的想法了,如果有大神,請別吐槽,一個晚上的結(jié)晶啊#include #include using namespace std;bool IsChar(char c)if (0=c&c=9) return 0;else return 1;int main()string s;/存儲用戶輸入的式子cout 請輸出表達(dá)式(務(wù)必以等號結(jié)束)endl;cout s;int newstr100;/用來存儲轉(zhuǎn)化后的表達(dá)式int arr100;/標(biāo)志數(shù)組:用來標(biāo)識newstr中每個元素對應(yīng)的是數(shù)據(jù)還是運算符,若是數(shù)據(jù),對應(yīng)位置為0,反之為1int i = 0;/對s中的內(nèi)容進(jìn)行索引while(si!=)arri = IsChar(si); i+;/如果是字符,arr對應(yīng)位置標(biāo)1;數(shù)據(jù)則標(biāo)0i = 0;/對s中的內(nèi)容進(jìn)行索引int n = 0; /存儲新的字符串的字符下標(biāo)while(si!=)/此循環(huán)將s中字符串轉(zhuǎn)化成數(shù)值形式存儲在newstr中,并用arr數(shù)組標(biāo)識每一位是數(shù)據(jù)還是字符if (arri=1)/如果是字符,轉(zhuǎn)化成數(shù)值后直接放進(jìn)newstr,并在arr的對應(yīng)位置標(biāo)識上1newstrn = int(si); arrn = 1; n+; i+;else/如果不是字符,轉(zhuǎn)化成十進(jìn)制數(shù)據(jù)后存入newstr,并在arr對應(yīng)位置標(biāo)識上0if(i = 0)/如果第一位就是數(shù)值,直接存入newstrn = int(si) - 48;arrn = 0;n+; i+;else if(arri-1=0)/如果之前一個字符也是數(shù)字,將此數(shù)據(jù)與之前數(shù)據(jù)合并,例如字符串“90”轉(zhuǎn)化成整型90后存入,并標(biāo)識上0newstrn-1 = 10 * newstrn-1 + int(si) - 48;arrn-1 = 0;i+;elsenewstrn = int(si) - 48;arrn = 0;n+; i+;newstrn = -1;arrn=1;/新字符串結(jié)束標(biāo)記/*/此部分用來打印轉(zhuǎn)化后的newstr及其標(biāo)識數(shù)組arrint i = 0;while(newstri!=-1)coutnewstrit;i+;coutendl;i = 0;while(newstri!=-1)coutarrit;i+;coutendl;*/i = 0;/用來索引newstr中的數(shù)據(jù)int stack1100;/用來存儲后綴表達(dá)式int k=0;/stack1的索引int stack2100;/用來臨時存儲符號int m=0;/stack2的索引while(newstri!=-1)/此循環(huán)將newstr轉(zhuǎn)化成后綴表達(dá)式并存入stack1中;轉(zhuǎn)化步驟參考數(shù)據(jù)結(jié)構(gòu)棧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的結(jié)束標(biāo)記,也就是后綴表達(dá)式的結(jié)束標(biāo)記k = 0;/打印后綴表達(dá)式cout 后綴表達(dá)式為:;while(stack1k!=-1)if(arrk=0)coutstack1k ;elsecoutchar(stack1k) ;k+;coutendl;int stack3100;/臨時棧,計算后綴表達(dá)式時用到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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論