Сделать проверку ввода на число и математические знаки - C#
Формулировка задачи:
Смысл в том, что в консоль пишется выражение (Например: (2+2)*2) и считается. Нужно сделать так, чтобы писать можно было только числа и мат символы (/,*,-,+ и т.п.). Как сделать проверку на числа я знаю, а как туда присобачить символы не знаю.
Вот весь код, вдруг поможет.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string x;
do
{
Console.WriteLine("Введите: \n 1 - Начать вычисления \n 2 - Выход");
x = Console.ReadLine();
Console.Clear();
switch(x){
case "1":
Console.WriteLine("Введите выражение: ");
String s = Console.ReadLine();
Console.WriteLine("{0} = {1}", s, Evaluate(s));
Console.ReadKey();
Console.Clear();
break;
case "2":
break;
default:
Console.WriteLine("Неверное значение");
Console.ReadKey();
Console.Clear();
break;
}
} while (x != "2");
}
public static object Evaluate(string s)
{
using (DataTable eval = new DataTable())
return eval.Compute(s, null);
}
}
}Решение задачи: «Сделать проверку ввода на число и математические знаки»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string x;
do
{
Console.WriteLine("Введите: \n 1 - Начать вычисления \n 2 - Выход");
x = Console.ReadLine();
Console.Clear();
switch (x)
{
case "1":
Console.WriteLine("Введите выражение: ");
String s = Console.ReadLine();
if (Regex.IsMatch(s, @"^[()+\-*/. \d\s.]*$"))
Console.WriteLine("{0} = {1}", s, Evaluate(s));
else
Console.WriteLine("Неверное значение");
Console.ReadKey();
Console.Clear();
break;
case "2":
break;
default:
Console.WriteLine("Неверное значение");
Console.ReadKey();
Console.Clear();
break;
}
} while (x != "2");
}
public static object Evaluate(string s)
{
using (DataTable eval = new DataTable())
return eval.Compute(s, null);
}
}
}