1.编程思路
任何表达式可分为3类:1.简单表达式,即只带加减乘除的运算表达式,如1+2,1+3/2,1*2*3+4*6等。2.只带有函数符号不带括号的表达式,如sin[30],exp[3+4*5],sin[1+sin[2]]等。3.一般表达式,即带有括号,简单表达式以及符号函数的表达式,如(1+2+sin[30])*3,2+sin[1+(sin[30]+1)*2]等。
基本算法流程图:
于是问题归结为几个子过程:1.判断表达式中是否存在括号 2.获取最内层括号内容 3.无括号计算函数 4.给定字符串位置,用已知字符串代替原字符串内容。
步骤1,2,4分别可以用一个函数实现:
//判断表达式中是否有括号
bool IsContainBracket(CString str);
//若存在括号,则获得最内层括号位置
void GetBracketPos(CString str,int *start,int *end);
//用一段字符代替两个位置之间的内容
CString ReplaceBetweenPos(CString toBeReplace,CString str,int start,int end);
步骤3较复杂,可以分解为几个子步骤,思路如下:
-