static int EvaluateExpression(string formula)
{
string[] numbers = formula.Split(new char[] { '+', '-' });
string[] symbols = formula.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' });
int result = int.Parse(numbers[0]);
for (int i = 0; i < numbers.Length; i++)
{
switch(symbols[i])
{
case "+":
result += int.Parse(numbers[i]);
break;
case "-":
result -= int.Parse(numbers[i]);
break;
}
}
return result;
}
static int EvaluateExpression(string formula)
{
string[] numbers = formula.Split(new char[] { '+', '-' }).Where(e=>e.Trim() != "").ToArray();
string[] symbols = Regex.Matches(formula, "[+-]").Cast<Match>().Select(e => e.Value).ToArray();
if(numbers.Length != symbols.Length+1)
throw new FormatException("Не верное количество знаков");
int result;
int i = -1;
try
{
result = int.Parse(numbers[0]);
for (i = 0; i < symbols.Length; i++){
switch(symbols[i])
{
case "+":
result += int.Parse(numbers[i+1]);
break;
case "-":
result -= int.Parse(numbers[i+1]);
break;
}
}
}catch(FormatException e){
throw new FormatException(String.Format("Не верное число '{0}'", numbers[i+1]));
}
return result;
}
static private string SomeFunc(string formula)
{
char[] allowSymbols = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-' };
int result = 0;
for (int i = 0; i < formula.Length - 1; i++)
{
// если текущий соответстует любому из доступых
if (allowSymbols.Any(x=> x.Equals(formula[i])))
{
switch (formula[i])
{
case '+':
result += int.Parse(formula[i+1].ToString());
i++;
break;
case '-':
result -= int.Parse(formula[i+1].ToString());
i++;
break;
default:
// запись первого символа, можно через индекс 0, но так красиво я считаю.
result = int.Parse(formula[i].ToString());
break;
}
}
else
{
return "wrong symbol";
}
}
return result.ToString();
}