题目来自网络
题目描述
通过键盘输入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; }
代码好丑陋,哎...