每日一题(89) - 两个字符串进行加减

来源:互联网 发布:如何在淘宝投诉卖家 编辑:程序博客网 时间:2024/05/18 11:25

题目来自网络

题目描述

通过键盘输入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;}
代码好丑陋,哎...

原创粉丝点击