0001 void readNumber ( char*& p, Stack<float>& stk ) { //将起始于p的子串解析为数值,并存入操作数栈 0002 stk.push ( ( float ) ( *p - '0' ) ); //当前数位对应的数值进栈 0003 while ( isdigit ( * ( ++p ) ) ) //只要后续还有紧邻的数字(即多位整数的情况),则 0004 stk.push ( stk.pop() * 10 + ( *p - '0' ) ); //弹出原操作数并追加新数位后,新数值重新入栈 0005 if ( '.' != *p ) return; //此后非小数点,则意味着当前操作数解析完成 0006 float fraction = 1; //否则,意味着还有小数部分 0007 while ( isdigit ( * ( ++p ) ) ) //逐位加入 0008 stk.push ( stk.pop() + ( *p - '0' ) * ( fraction /= 10 ) ); //小数部分 0009 }