题目来自网络
题目描述
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:
1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“0”。
要求实现函数:
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串,lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
举例:
输入:“4 + 7” 输出:“11”
输入:“4 - 7” 输出:“-3”
输入:“9 ++ 7” 输出:“0” 注:格式错误
代码:
#include <iostream>
using namespace std;
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr)
{
int nLeftNum = 0;
int nRightNum = 0;
int nResult = 0;
int nCur = 0;
bool bFlag = false;//+
//取左操作数
while(pInputStr[nCur] != ' ')
{
if (pInputStr[nCur] >= '0' && pInputStr[nCur] <= '9')
{
nLeftNum = nLeftNum * 10 + pInputStr[nCur] - '0';
nCur++;
}
else
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
}
//检测左操作数是否非法
if (nLeftNum >= 100 || nLeftNum <= 0)
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
//取运算符
nCur++;
if (pInputStr[nCur] == '-')
{
bFlag = true;
}
else if (pInputStr[nCur] == '+')
{
bFlag = false;
}
else
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
//检测运算符后第一个空格
nCur ++;
if (pInputStr[nCur] == ' ')
{
nCur++;
}
else
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
//取右操作数
while(pInputStr[nCur] != '\0')
{
if (pInputStr[nCur] >= '0' && pInputStr[nCur] <= '9')
{
nRightNum = nRightNum * 10 + pInputStr[nCur] - '0';
nCur++;
}
else
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
}
//检测左操作数是否非法
if (nRightNum >= 100 || nRightNum <= 0)
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
//两数进行操作
if (bFlag)//减法
{
nResult = nLeftNum - nRightNum;
}
else
{
nResult = nLeftNum + nRightNum;
}
//把结果变成字符串
int nCount = 0;
int nLeft = 0;
int nRight = 0;
char cTmp = 0;
bool bIsPos = true;
if (nResult == 0)
{
pOutputStr[0] = '0';
pOutputStr[1] = '\0';
return;
}
else if (nResult < 0)
{
bIsPos = false;
nResult = -nResult;
pOutputStr[nCount++] = '-';
}
while(nResult)
{
pOutputStr[nCount++] = nResult % 10 + '0';
nResult /= 10;
}
//翻转
if (bIsPos)
{
nLeft = 0;
}
else
{
nLeft = 1;
}
nRight = nCount - 1;
while(nRight > nLeft)
{
cTmp = pOutputStr[nRight];
pOutputStr[nRight] = pOutputStr[nLeft];
pOutputStr[nLeft] = cTmp;
nRight--;
nLeft++;
}
pOutputStr[nCount] = '\0';
}
int main()
{
char InputStr[10];
char OutputStr[10];
cin.getline(InputStr,10);
arithmetic(InputStr,strlen(InputStr),OutputStr);
cout<<OutputStr<<endl;
system("pause");
return 1;
}代码好丑陋,哎...
1710

被折叠的 条评论
为什么被折叠?



