攻城狮凌风

每天一道算法题(28)——计算正整数的加、减运算式

题目

      通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
      补充说明:
           1. 操作数为正整数,不需要考虑计算结果溢出的情况。
           2. 若输入算式格式错误,输出结果为“0”。


代码:

bool getNum(const char*& p,int& result){//获得操作数,并返回下一个结果
	if(!p||*p<'0'||*p>'9'){
		return false;
	}
	else{
		result=0;
		while(*p>='0'&&*p<='9'){
			result=*p-'0'+10*result;
			p++;
		}
	}
	return true;
}
void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr){
	if(!pInputStr||!lInputLen){
		*pOutputStr='0';*(pOutputStr+1)='\0';
		  return;
	}
	int left=0,right=0;//左右操作数
	bool flag=true;//标记操作符
	bool op=false;//操作符已经获取

	if(!getNum(pInputStr,left)){//左操作数初始化不成功
		 *pOutputStr='0';
		   return;
	}
	while(*pInputStr!='\0'){
		if(op&&*pInputStr==' '&&*(pInputStr+1)>='0'&&*(pInputStr+2)<='9'){//当前仅当操作符获取成功且满足条件时
			pInputStr++;
			getNum(pInputStr,right);
			if(flag)
				left=left+right;
			else
				left=left-right;
			op=false;//操作符已经使用,此时未获取。
		}
		else if(!op&&*pInputStr==' '&&*(pInputStr+1)=='+'){//当且仅当操作符获取不成功且满足格式,则获取操作符
			flag=true;
			op=true;
			pInputStr+=2;
		}
		else if(!op&&*pInputStr==' '&&*(pInputStr+1)=='-'){//当且仅当操作符获取不成功且满足格式,则获取操作符
			flag=false;
			op=true;
			pInputStr+=2;
		}
		else{//其它情况
		  *pOutputStr='0';*(pOutputStr+1)='\0';
		   return;
		}
	}
    itoa(left,pOutputStr,10);
}



说明:

      及其鲁棒。严格遵循格式。对于一切不遵循格式的所有输入字符串,设定输出为0。



posted on 2015-08-04 15:13  攻城狮凌风  阅读(233)  评论(0编辑  收藏  举报

导航