针对第三点:负数带括号的输出,可以先通过正则表达式等工具把输入的表达式字符串分析,再判断运算数是否为负数,如果是,则在前面加上括号。
针对第四点:处理除数为0的情况,可以在计算前判断右操作数是否为0,如果是,则输出"除数不能为0"。
以下是可行的代码实现,使用C#语言。
using System;
using System.Text.RegularExpressions;
namespace SimpleCalculator
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个算术表达式:");
string expression = Console.ReadLine();
string pattern = @"(\d+)([\+\-\*\/])(\d+)";
Match match = Regex.Match(expression, pattern);
if (match.Success)
{
int leftOperand = int.Parse(match.Groups[1].Value);
char operatorChar = char.Parse(match.Groups[2].Value);
int rightOperand = int.Parse(match.Groups[3].Value);
int result = 0;
switch (operatorChar)
{
case '+':
result = leftOperand + rightOperand;
break;
case '-':
result = leftOperand - rightOperand;
break;
case '*':
result = leftOperand * rightOperand;
break;
case '/':
if (rightOperand == 0)
{
Console.WriteLine("除数不能为0");
return;
}
result = leftOperand / rightOperand;
break;
}
string leftOperandString = leftOperand >= 0 ? leftOperand.ToString() : "(" + leftOperand + ")";
string rightOperandString = rightOperand >= 0 ? rightOperand.ToString() : "(" + rightOperand + ")";
Console.WriteLine("{0} {1} {2} = {3}", leftOperandString, operatorChar, rightOperandString, result);
}
else
{
Console.WriteLine("输入格式不正确");
string expression = Console.ReadLine();
int left = 0;
int right = 0;
char op = ' ';
bool leftNegative = false;
bool rightNegative = false;
for (int i = 0; i < expression.Length; i++)
{
if (expression[i] == '-')
{
if (i == 0)
{
leftNegative = true;
}
else if (expression[i - 1] == '+' || expression[i - 1] == '-' || expression[i - 1] == '' || expression[i - 1] == '/')
{
rightNegative = true;
}
}
else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '' || expression[i] == '/')
{
op = expression[i];
left = int.Parse(expression.Substring(0, i));
right = int.Parse(expression.Substring(i + 1));
break;
}
}
if (leftNegative)
{
left = -left;
}
if (rightNegative)
{
right = -right;
}
int result = 0;
switch (op)
{
case '+':
result = left + right;
break;
case '-':
result = left - right;
break;
case '*':
result = left * right;
break;
case '/':
if (right == 0)
{
Console.WriteLine("除数不能为0!");
return;
}
result = left / right;
break;
}
if (leftNegative)
{
Console.Write("(" + -left + ")");
}
else
{
Console.Write(left);
}
Console.Write(" " + op + " ");
if (rightNegative)
{
Console.Write("(" + -right + ")");
}
else
{
Console.Write(right);
}
Console.WriteLine(" = " + result);