zoukankan      html  css  js  c++  java
  • 每天一道算法题(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)='';
    		  return;
    	}
    	int left=0,right=0;//左右操作数
    	bool flag=true;//标记操作符
    	bool op=false;//操作符已经获取
    
    	if(!getNum(pInputStr,left)){//左操作数初始化不成功
    		 *pOutputStr='0';
    		   return;
    	}
    	while(*pInputStr!=''){
    		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)='';
    		   return;
    		}
    	}
        itoa(left,pOutputStr,10);
    }



    说明:

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



  • 相关阅读:
    【转】测试驱动开发
    【转】什么是“脚本语言”
    【转】“解决问题”与“消灭问题”
    【转】程序语言的常见设计错误(1)
    【转】解密“设计模式”
    【转】所谓软件工程
    【转】清华梦的粉碎
    算法知识目录整理
    买书不读是一种什么病?
    Linux 下socket通信终极指南(附TCP、UDP完整代码)
  • 原文地址:https://www.cnblogs.com/engineerLF/p/5392993.html
Copyright © 2011-2022 走看看