第一次写C#控制台小程序,用来计算输入如45 + 33形式的算术计算,结果碰到数组下标越界问题,郁闷中...
错误://分离出第二操作数
->这具有错,索引超出了数组界限。 while (char.IsDigit(exp[idx]))
digit += exp[idx++];using System;namespace math_op
{
class math_op_cls
{
//简单数学计算程序
static void Main(string[] args)
{
Console.WriteLine("请输入一个算术表达式!");
string exp = Console.ReadLine();
int idx = 0;
//去掉首部的所有空格
while (char.IsWhiteSpace(exp[idx]))
idx++; //分离出第一个操作数
//char c;
string digit = string.Empty;
//c = exp[idx];
while (char.IsDigit(exp[idx]))
digit += exp[idx++];
//第一个操作书digit1
int digit1 = Int32.Parse(digit); //去掉第一操作数和算符中的空格
while(char.IsDigit(exp[idx]))
idx++; //分离出第一个操作符
char op1 = exp[idx++]; //去掉算符和第二操作数中的空格
while (char.IsWhiteSpace(exp[idx]))
idx++; digit = string.Empty;
//分离出第二操作数
while (char.IsDigit(exp[idx]))
digit += exp[idx++];
//第二个操作数digit2
int digit2 = Int32.Parse(digit); float result = 0;
switch (op1)
{
case '+':
result = (float)(digit1 + digit2);
break;
case '-':
result = (float)(digit1 - digit2);
break;
case '*':
result = (float)(digit1 * digit2);
break;
case '/':
result = (float)(digit1 / digit2);
break;
case '%':
result = (float)(digit1 % digit2);
break;
} //display result
Console.WriteLine("结果为:" + result);
} }
}
错误://分离出第二操作数
->这具有错,索引超出了数组界限。 while (char.IsDigit(exp[idx]))
digit += exp[idx++];using System;namespace math_op
{
class math_op_cls
{
//简单数学计算程序
static void Main(string[] args)
{
Console.WriteLine("请输入一个算术表达式!");
string exp = Console.ReadLine();
int idx = 0;
//去掉首部的所有空格
while (char.IsWhiteSpace(exp[idx]))
idx++; //分离出第一个操作数
//char c;
string digit = string.Empty;
//c = exp[idx];
while (char.IsDigit(exp[idx]))
digit += exp[idx++];
//第一个操作书digit1
int digit1 = Int32.Parse(digit); //去掉第一操作数和算符中的空格
while(char.IsDigit(exp[idx]))
idx++; //分离出第一个操作符
char op1 = exp[idx++]; //去掉算符和第二操作数中的空格
while (char.IsWhiteSpace(exp[idx]))
idx++; digit = string.Empty;
//分离出第二操作数
while (char.IsDigit(exp[idx]))
digit += exp[idx++];
//第二个操作数digit2
int digit2 = Int32.Parse(digit); float result = 0;
switch (op1)
{
case '+':
result = (float)(digit1 + digit2);
break;
case '-':
result = (float)(digit1 - digit2);
break;
case '*':
result = (float)(digit1 * digit2);
break;
case '/':
result = (float)(digit1 / digit2);
break;
case '%':
result = (float)(digit1 % digit2);
break;
} //display result
Console.WriteLine("结果为:" + result);
} }
}
while (idx<exp .Length && char.IsDigit(exp[idx])) digit += exp[idx++];
exp[4]='2';
这时执行digit += exp[idx++];后,digit="32",然后idx++,变成5,再进行下一次循环即:char.IsDigit(exp[5])即超出了范围...所以报错了...
string exp = Console.ReadLine();
string[] str = exp.Split(new char[] { '+', '-', '*', '/' });
int digit1 = Convert.ToInt32(str[0]);
int digit2 = Convert.ToInt32(str[1]);
char op1 = exp.Substring(str[0].Length, 1)[0]; float result = 0;
switch (op1)
{
case '+':
result = (float)(digit1 + digit2);
break;
case '-':
result = (float)(digit1 - digit2);
break;
case '*':
result = (float)(digit1 * digit2);
break;
case '/':
result = (float)(digit1 / digit2);
break;
case '%':
result = (float)(digit1 % digit2);
break; } //display result
Console.WriteLine("结果为:" + result);
int type=0;
int i=s.IndexOf('+');
if (i < 0)
{
i = s.IndexOf('-');
if (i < 0)
{
i = s.IndexOf('*');
if (i < 0)
{
i = s.IndexOf('/');
type = 4;
}
else
type = 3;
}
else
type = 2;
}
else
type = 1; int num1 = Convert.ToInt32(s.Substring(0, i).Trim());
int num2 = Convert.ToInt32(s.Substring(i + 1).Trim());
switch(type)
{
case 1:
return num1 + num2;
break;
case 2:
return num1 - num2;
break;
case 3:
return num1 * num2;
break;
case 4:
return num1 / num2;
break;
default:
break; } return 0;
string exp = Console.ReadLine();
string[] str = exp.Split(new char[] { '+', '-', '*', '/','%' });
int digit1 = Convert.ToInt32(str[0].Trim());
int digit2 = Convert.ToInt32(str[1].Trim());
char op1 = exp.Substring(str[0].Length, 1)[0]; float result = 0;
switch (op1)
{
case '+':
result = (float)(digit1 + digit2);
break;
case '-':
result = (float)(digit1 - digit2);
break;
case '*':
result = (float)(digit1 * digit2);
break;
case '/':
result = (float)(digit1 / digit2);
break;
case '%':
result = (float)(digit1 % digit2);
break; } //display result
Console.WriteLine("结果为:" + result);
这样就OK了..