每日一题(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;}代码好丑陋,哎...
- 每日一题(89) - 两个字符串进行加减
- 每日一题:字符串变形
- 时间字符串进行时间加减
- 每日一题(86) - 计算两个字符串的最长公共子序列(LCS)
- 每日一题(66) - 字符串的排列
- 每日一题(87) - 字符串过滤
- 每日一题(88) - 字符串压缩
- 每日一题(93) - 字符串截断
- 【每日一题】字符串是否包含问题
- 每日一题 No.23 字符串学习
- <每日一题>最大回文子字符串
- 每日一题(7) - 合并两个有序链表
- 每日一题(13) - 判断两个无环链表是否相交
- 每日一题(36) - 用两个栈实现队列
- 每日一题(37) - 两个队列实现栈
- 每日一题之找出两个单独出现的数字
- c++ 两个字符串加减得到相差秒数
- 每日一题(57) - 把字符串转换成整数
- 探索Win32系统之窗口类(Window Classes in Win32)
- 《JAVA课程设计》笔记-五章
- Servlet:Post提交表单
- 跨域和JSONP的最好解释
- C#写的com c++调用demo
- 每日一题(89) - 两个字符串进行加减
- 【课程资料】template课件及样例程序下载
- DVBLAST 组播软件的安装与使用!
- 浅析C++ StackTrace 堆栈轨迹
- Crypto++学习总结---DES
- 从客户端(txtContent="<p>1</p>")中检测到有潜在危险的 Request.Form 值
- do_command
- 为什么浏览器不许跨域
- 以屏幕中间为区分,同时调用两个文档占满屏进行比较的一个实现方法