现在的位置: 首页 > 综合 > 正文

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

2013年12月09日 ⁄ 综合 ⁄ 共 2074字 ⁄ 字号 评论关闭

题目来自网络

题目描述

通过键盘输入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;
}

代码好丑陋,哎...

抱歉!评论已关闭.