int a = Convert.ToInt32(Convert.ToString(Text1.Text));//here is the exception i am getting.
int b = Convert.ToInt32(Convert.ToString(Text1.Text));
char c = Convert.ToChar(Convert.ToString(Text1.Text));
int result = Convert.ToInt32(Convert.ToString(Text2.Text));
if (c == '+')
{
result = a + b;
Text2.Text += result;
}
else if (c == '-')
{
result = a - b;
Text2.Text += result;
}
else if (c == '/')
{
result = a / b;
Text2.Text += result;
}
else if (c == '*')
{
result = a * b;
Text2.Text += result;
}
else
return;
我得到此代码的格式异常为“输入字符串格式不正确”。我知道这是一个简单的问题,但我没有得到任何回答。
提前谢谢。
答案 0 :(得分:3)
首先,Convert.ToString(someString)
没用。其次,您实际上必须解析来自Text1
的输入以获取所有相关的部分。
最简单的方法是将字符串拆分为某个分隔符:
string[] parts = Text1.Text.Split(' ');
int a = Convert.ToInt32(parts[0]);
int b = Convert.ToInt32(parts[2]);
char c = parts[1][0];
这将处理123 + 456
形式的任何输入(每个部分之间只有一个空格)。或者,您可以使用正则表达式:
var match = Regex.Match(Text1.Text, @"^\s*(\d+)\s*([+/*-])\s*(\d+)\s*$");
if (match.Success)
{
int a = Convert.ToInt32(match.Groups[1].Value);
int b = Convert.ToInt32(match.Groups[3].Value);
char c = match.Groups[2].Value[0];
}
最后,如果你不打算对结果做任何事情,解析Text2
是没有意义的。
答案 1 :(得分:0)
不可否认,这不是一个漂亮的,但它会为正数和最多3位数的数字完成工作。
我测试了这些值:5+2
结果10
,50*2
结果100
,50*2+1
结果101
查看我的 Demo
string[] num = Regex.Split(textBox1.Text, @"\-|\+|\*|\/").Where(s => !String.IsNullOrEmpty(s)).ToArray(); // get Array for numbers
string[] op = Regex.Split(textBox1.Text, @"\d{1,3}").Where(s => !String.IsNullOrEmpty(s)).ToArray(); // get Array for mathematical operators +,-,/,*
int numCtr = 0, lastVal=0; // number counter and last Value accumulator
string lastOp = ""; // last Operator
foreach (string n in num)
{
numCtr++;
if (numCtr == 1)
{
lastVal = int.Parse(n); // if first loop lastVal will have the first numeric value
}
else
{
if (!String.IsNullOrEmpty(lastOp)) // if last Operator not empty
{
// Do the mathematical computation and accumulation
switch (lastOp)
{
case "+":
lastVal = lastVal + int.Parse(n);
break;
case "-":
lastVal = lastVal - int.Parse(n);
break;
case "*":
lastVal = lastVal * int.Parse(n);
break;
case "/":
lastVal = lastVal + int.Parse(n);
break;
}
}
}
int opCtr = 0;
foreach (string o in op)
{
opCtr++;
if (opCtr == numCtr) //will make sure it will get the next operator
{
lastOp = o; // get the last operator
break;
}
}
}
MessageBox.Show(lastVal.ToString());