题目:
通过键盘输入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 "StdAfx.h" #include "subStr.h" #include<iostream> using namespace std; void arithmetic(const char *pInputStr,long lInputLen,char * pOutputStr){ int index=-1; int firstNum=0,secondNum=0,baseNum=10; char opt; if(lInputLen<5) { printf("invalid parameters\n"); return; } //取得第一个操作数 while(pInputStr[++index]!=' ') // 这里遇到空格截止 { if(pInputStr[index]>='0' && pInputStr[index]<='9') { firstNum=(firstNum*baseNum)+(pInputStr[index]-'0'); }else { printf("invalid input.\n"); return; } } //取操作符 while(pInputStr[++index]!=' ') //这里遇到空格截止 { if(pInputStr[index+1]!=' ') { printf("invalid input.\n"); return; } if(pInputStr[index]!='+' && pInputStr[index]!='-' && pInputStr[index]!='*' && pInputStr[index]!='/') { printf("invalid input.\n"); return; } opt=pInputStr[index]; } //index++; //移动到最后一个空格. //这是错的,while循环执行到空格才会停止,这句不需要。 //取得第二个操作数 while(pInputStr[++index]!='\0') //这里遇到\0截止 { if(pInputStr[index]>='0' && pInputStr[index]<='9') { secondNum=(secondNum*baseNum)+(pInputStr[index]-'0'); }else { printf("invalid input.\n"); return; } } //现在开始计算 switch(opt) { case '+': printf("%d\n",(firstNum+secondNum)); break; case '-': printf("%d\n",(firstNum-secondNum)); break; case '*': printf("%d\n",(firstNum*secondNum)); break; case '/': printf("%d\n",(firstNum/secondNum)); break; default: printf("invalid input.\n"); return; } } int main(){ char *pInputStr=(char *)malloc(20); char *pOutputStr=(char *)malloc(20); gets(pInputStr); //这里不能用scanf("%s",pInputStr);因为这样会以空格结束。 arithmetic(pInputStr,strlen(pInputStr),pOutputStr); system("pause"); return 0; }