Well this questions is probably gonna be closed before I get an answer... I am trying to program a very simple calculator and this works flawlessly:
private void button1_Click(object sender, EventArgs e)
{
string[] input = rtbInput.Text.Split(' ');
rtbInput.Text += " = " + CalculateNumber(input).ToString();
}
long CalculateNumber(string[] input)
{
long curValue = 0;
curValue = long.Parse(input[0]);
//LOOK FOR PARENTHASIS, LAST INDEX, SEARCH FROM THERE UNTIL FIRST INDEX, RUN THIS AGAIN FOR THAT.
//THEN REPLACE "5 + (3 + 3)" with 5 + 6. So calculate 3 + 3 = 6 and replace ( until ) with answer.
if (rtbInput.Text.Contains("(") && rtbInput.Text.Contains(")"))
{
int c = 0;
int startNum;
int len;
string s = "No";
}
int i = 0;
while (i < (input.Length - 1))
{
switch (input[i])
{
case "+":
curValue += long.Parse(input[i + 1]);
break;
case "-":
curValue -= long.Parse(input[i + 1]);
break;
case "*":
curValue = curValue * long.Parse(input[i + 1]);
break;
case "/":
curValue = curValue / long.Parse(input[i + 1]);
break;
}
i++;
}
return curValue;
}
this works superbly. But when trying to add capability to calculate Parenthasis "(3 * 3) = 9" and i implement this code:
long CalculateNumber(string[] input)
{
long curValue = 0;
curValue = long.Parse(input[0]);
//LOOK FOR PARENTHASIS, LAST INDEX, SEARCH FROM THERE UNTIL FIRST INDEX, RUN THIS AGAIN FOR THAT.
//THEN REPLACE "5 + (3 + 3)" with 5 + 6. So calculate 3 + 3 = 6 and replace ( until ) with answer.
if (rtbInput.Text.Contains("(") && rtbInput.Text.Contains(")"))
{
int c = 0;
int startNum;
int len;
string s = "No";
//while there are still parenthasis in the input, do this
if (c < rtbInput.Text.Split('(').Count() - 1) //REPLACE WITH WHILE
{
startNum = rtbInput.Text.LastIndexOf('(') + 1;
len = rtbInput.Text.IndexOf(')', startNum);// - startNum;
s = rtbInput.Text.Substring(startNum, len);
this.Name = s;
//NOW REPLACE THIS WITH THE RETURN OF CalculateParenthasis.Split(' ')
rtbInput.Text = rtbInput.Text.Replace("(" + s + ")", CalculateParenthasis(s.Split(' ')).ToString());
}
long CalculateParenthasis(string[] input)
{
long curValue = 0;
curValue = long.Parse(input[0]);
button1.Text += curValue.ToString();
int i = 0;
while (i < (input.Length - 1))
{
switch (input[i])
{
case "+":
curValue += long.Parse(input[i + 1]);
break;
case "-":
curValue -= long.Parse(input[i + 1]);
break;
case "*":
curValue = curValue * long.Parse(input[i + 1]);
break;
case "/":
curValue = curValue / long.Parse(input[i + 1]);
break;
}
i++;
}
return curValue;
}
As you can see the CalculateParenthasis() function works exactly the same as CalculateNumber() but takes the number between the parenthasis, but this errors at the switch statement saying the input string was the wrong format? WTH? I barely don't know how to even ask this question, seems like something tiny and easy being wrong but I just can't see it.