课程设计报告Word文件下载.docx
- 文档编号:20383193
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:9
- 大小:42.11KB
课程设计报告Word文件下载.docx
《课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
3.1解决思路
分析正常数学表达式的逻辑运算。
数字的匹配原则。
运算符的匹配原则。
3.2问题
不知把要匹配的字符存储,然后匹配时再准确取出。
3.3解决办法
运用栈的思想解决了。
4.其他
//头文件MathString.h
classCMathString
{
public:
CMathString(void);
CMathString(consttstring&
str);
~CMathString(void);
//存放波兰表达式的结构
structBolan
{
intm_nFlag;
//0:
数值;
1:
运算符
doublem_dValue;
//数值
TCHARm_chOper;
//运算符"
+,-,*,/,%,(,)"
};
typedefstd:
:
vector<
std:
pair<
TCHAR,int>
>
CVecChar2Pos;
Bolan>
CVecBolan;
//检查算术表达式是否正确匹配.
//return:
错误(不匹配)返回,正确返回非.
boolCheckMathExp();
//获取错误描述
consttstring&
GetErrDesc()const;
//获取错误位置
intGetErrPos()const;
private:
//类似printf的方式创建一个格式化的字符串。
请注意不要超过个字节,否则将会造成越界崩溃.
//返回一个格式化后的字符串.
tstringCreateFormatStr(constTCHAR*lpszFormat,...)const;
//获取字符串的最后一个字符.
TCHARGetEndChar(consttstring&
str)const;
TCHARGetEndChar(constCVecChar2Pos&
vecPair)const;
//获取字符串某位置前面相邻字符,nPos基于开始.
TCHARGetPreChar(consttstring&
str,intnPos)const;
//获取字符串某位置后面相邻字符,nPos基于开始.
TCHARGetNextChar(consttstring&
//出栈
voidPopStack(tstring&
str,intnCount=1)const;
//判断字符是否为操作符
boolIsOperator(TCHARch)const;
//判断字符是否为数字
boolIsDigit(TCHARch)const;
//将算术表达式转化成波兰表达式
boolStringToBolan();
//将数字字符串转化成数值
boolStringToDigit(tstringstr,double&
dValue);
//算术表达式
tstringm_strMathExp;
//表达式错误(不匹配)位置
intm_nErrPos;
//错误(不匹配)描述
tstringm_strErrDesc;
//存放转化后的波兰表达式
CVecBolanm_vecBolan;
};
//执行文件MathString.cpp
boolCMathString:
CheckMathExp()
if(m_strMathExp.empty())//若算术表达式为空,返回false
m_strErrDesc=_T("
算术表达式为空!
"
);
returnfalse;
}
//存放括号'
的栈
CVecChar2Posstack;
for(std:
string:
size_typeix=0;
ix!
=m_strMathExp.size();
++ix)
m_nErrPos=(int)ix;
TCHARch=m_strMathExp[ix];
if(ch==_T('
))//若是左括号'
,则入栈
{
stack.push_back(std:
make_pair(ch,ix));
}
elseif(ch==_T('
)'
))
if(GetEndChar(stack)==_T('
))//若栈的顶端字符为'
,则匹配,出栈
{
stack.pop_back();
}
else//若栈的顶端字符为非'
,不匹配,返回false
{
m_strErrDesc=CreateFormatStr(_T("
\n错误:
没找到与位置%d处的操作符'
相匹配的操作符'
!
),m_nErrPos);
returnfalse;
}
+'
)||ch==_T('
-'
))//若是'
或'
,检查后面相邻字符
TCHARchTmp=GetNextChar(m_strMathExp,ix);
if(chTmp==_T('
\0'
)||IsOperator(chTmp))
位置%d处的操作符'
%c'
没有右值!
),m_nErrPos,ch);
*'
/'
%'
,检查前后相邻字符
TCHARchTmp=GetPreChar(m_strMathExp,ix);
没有左值!
chTmp=GetNextChar(m_strMathExp,ix);
.'
))//若是小数点('
),检查前后相邻字符是否为阿拉伯数字
if(!
IsDigit(chTmp))
位置%d处的小数点前面没有左值!
位置%d处的小数点前面没有右值!
elseif(!
IsDigit(ch))//若为暂不能识别的字符
m_strErrDesc=CreateFormatStr(_T("
当前暂不能识别%d处的符号'
returnfalse;
//判断栈里是否还存有'
CVecChar2Pos:
const_reverse_iteratorit=stack.rbegin();
if(it!
=stack.rend())
m_strErrDesc=CreateFormatStr(_T("
),it->
second);
returntrue;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告