完成乙個四則運算表示式的計算,表示式由字串形式給出,輸入和輸出都為浮點數。
演算法1.字元檢索(從給定串中提取運算數和四則運算符+ - * / ( ),並按從左到右檢索順序歸入各自陣列,其中運算子陣列是基於給構的,數字陣列是基於double型的。運算子結構定義如下:
struct opt
;2.檢索串中數字的個數(含小數),分配陣列記憶體空間,放入數字
int howmanyfigs(char* pc)//統計串中有多少個數
}return numfig;
}void getnumbers(char* pc,double* buffer)//把串中的數放入double型陣列
if((*p) == '.')
}p--;
buffer[i++] = m + m2;
m = 0,n = 0,m2 = 0;n2 = 0;}}
}3.檢索串中運算子的個數,分配空間,放入陣列。
int howmanyopts(char* pc)
return numopts;
}void getopts(char* pc,opt* buffer)}}
4.排序,為運算子陣列中的元素按運算子優先順序排序,同等優先順序按自然左右順序排序
void paixv(opt array,int elementsnum)//對操作符陣列按優先順序排序
if(indexmax != j)
else if(array[indexnaturemin].order == array[j].order)//在優先順序相同的情況下比較自然優先順序}}
5.計算,按運算子陣列中的優先序按部計算,中間結果仍放入數字陣列中作為下一步計算的運算元。
struct message
;int checkfilter(int index,int checktohere,message* messbuf)
return index;
}double calc(double* numbersbuf,opt* optsbuf,message* messbuf,int optbuflength)
numbersbuf[indexlft] = optsbuf[i].ans;
messbuf[i].indexnew = indexlft;
messbuf[i].indexold = indexrgt;
}return numbersbuf[indexlft];//optsbuf[i-1].ans;
}6.試用
void main()
綜合//m.cpp
#include
struct opt
;void paixv(opt array,int elementsnum)//對操作符陣列按優先順序排序
if(indexmax != j)
else if(array[indexnaturemin].order == array[j].order)//在優先順序相同的情況下比較自然優先順序}}
int howmanyfigs(char* pc)//統計串中有多少個數
}return numfig;
}void getnumbers(char* pc,double* buffer)//把串中的數放入double型陣列
if((*p) == '.')
}p--;
buffer[i++] = m + m2;
m = 0,n = 0,m2 = 0;n2 = 0;}}
}int howmanyopts(char* pc)
return numopts;
}struct message
;int checkfilter(int index,int checktohere,message* messbuf)
return index;
}double calc(double* numbersbuf,opt* optsbuf,message* messbuf,int optbuflength)
numbersbuf[indexlft] = optsbuf[i].ans;
messbuf[i].indexnew = indexlft;
messbuf[i].indexold = indexrgt;
}return numbersbuf[indexlft];//optsbuf[i-1].ans;
}void getopts(char* pc,opt* buffer)}}
void main()
字串 四則運算
題目大意 有字串表示的乙個四則運算表示式,要求計算出該表示式的正確數值。四則運算即 加減乘除 另外該表示式中的數字只能是1位 數值範圍0 9 另若有不能整除的情況,按向下取整處理,eg 8 3得出值為2。若有字串 8 7 2 9 3 計算出其值為19。2012年華為上機的乙個題目 題目思路 建立棧分...
字串的四則運算
public string addstrings string num1,string num2 if b 0 tmp 10 return sb.reverse tostring 題目二 字串相減 給定兩個字串形式的非負整數 num1 和num2 計算它們的差。預設num1比num2大 注 不能使用...
字串的四則運算
四則運算,最常用的當然是逆波蘭方法,現將表示式由中綴表示式轉化為字尾表示式,然後再使用棧計算即可。這兩步下來,估計沒有三四百行 是實現不了的。中綴表示式轉字首字尾表示式 將中綴表示式轉換為字尾表示式的演算法思想 數字時,加入字尾表示式 運算子 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾...