【问题标题】:How can adapt my one digit calculator to work with any numbers of any length (real)如何使我的一位数计算器适用于任何长度的任何数字(真实)
【发布时间】:2016-10-13 09:07:22
【问题描述】:

所以我有这个代码,我一直在尝试调整它以处理任何数量的实数,似乎研究 MSFT 网站没有成功,所以我在这里作为我的最后手段。

char operation;
String calculation;
double num1, num2, ans;

Console.WriteLine("Place your calculation in the form (x'symbol'y)");
calculation = Console.ReadLine();
num1 = double.Parse(calculation[0].ToString());
num2 = double.Parse(calculation[2].ToString());
operation = calculation[1];

switch (operation)
{
    case '+':
        ans = num1 + num2;
        Console.WriteLine(num1 + num2);
        break;
    case '-':
        ans = num1 - num2;
        Console.WriteLine(num1 - num2);
        break;
    case '/':
        ans = num1 / num2;
        Console.WriteLine(num1 / num2);
        break;
    case '*':
        ans = num1 * num2;
        Console.WriteLine(num1 * num2);
        break;
}

【问题讨论】:

  • 只是一个提示:string.Split() 方法应该很适合您的问题...
  • 简单:decimal result = (decimal)(new DataTable().Compute(Console.ReadLine(), null))。 ;-)
  • 当您将对象类型输出转换为双精度或十进制时会引发异常,结果必须从字符串中解析:double result = double.Parse(new DataTable().Compute(Console.ReadLine(), null).ToString());@Tim Schmelter
  • @Innat3:那么最好使用Convert.ToDecimal(....),而不是效率较低且还可能导致本地化问题的字符串转换。所以将Compute-result 存储在object 变量中,然后使用Convert.ToDecimal
  • @Tim Schmelter 是的,这也有效!我不知道它更有效

标签: c# console-application calculator


【解决方案1】:

这是一个示例,说明如何使用 Regex 并遵循您提供的格式使其适用于任何长度的数字。正如 cmets 中所述,Compute() 是一种更简单的方法来使其工作!

        char operation;
        string calculation;
        double num1, num2, ans;
        Regex validcheck = new Regex(@"^\d+([+]|[-]|[/]|[*])\d+$");
        Regex findnumber = new Regex(@"\d+");
        Regex findoperation = new Regex(@"([+]|[-]|[/]|[*])");

        Console.WriteLine("Place your calculation in the form (x'symbol'y)");

        calculation = Console.ReadLine();

        if (validcheck.IsMatch(calculation))
        {
            num1 = double.Parse(findnumber.Matches(calculation)[0].Value);
            num2 = double.Parse(findnumber.Matches(calculation)[1].Value);
            operation = char.Parse(findoperation.Match(calculation).Value);

            switch (operation)
            {
                case '+':
                    ans = num1 + num2;
                    Console.WriteLine(num1 + num2);
                    break;
                case '-':
                    ans = num1 - num2;
                    Console.WriteLine(num1 - num2);
                    break;
                case '/':
                    ans = num1 / num2;
                    Console.WriteLine(num1 / num2);
                    break;
                case '*':
                    ans = num1 * num2;
                    Console.WriteLine(num1 * num2);
                    break;
            }
        }
        else
        {
            Console.WriteLine("The operation you inserted has an invalid format");
        }
        Console.Read();

【讨论】:

    【解决方案2】:

    第七行代码num2 = double.Parse(calculation[0].ToString()); 你应该写num2 = double.Parse(calculation[2].ToString()); 第二部分我还在努力解决。 编辑:您在我发布此内容时对其进行了更改。

    【讨论】:

    • 是的,谢谢,我一秒钟前也知道了 :)
    • @innat3 你不能使用像 Substring 和 IndexOf 这样的字符串方法吗?
    【解决方案3】:

    做了类似的事情,除了我只使用一个正则表达式,然后为数字和运算符索引组捕获。

            char operation;
            String calculation;
            double num1, num2, ans;
    
            Console.WriteLine("Place your calculation in the form (x'symbol'y)");
            calculation = Console.ReadLine();
            Regex testRegex = new Regex(@"([0-9]*)([+-/*])([0-9]*)");
            var match = testRegex.Match(calculation);
    
            if (!match.Success)
            {
                Console.WriteLine("Invalid syntax");
                return;
            }
    
            num1 = double.Parse(match.Groups[1].Value);
            num2 = double.Parse(match.Groups[3].Value);
            operation = match.Groups[2].Value[0];
    
            switch (operation)
            {
                case '+':
                    ans = num1 + num2;
                    Console.WriteLine(num1 + num2);
                    break;
                case '-':
                    ans = num1 - num2;
                    Console.WriteLine(num1 - num2);
                    break;
                case '/':
                    ans = num1 / num2;
                    Console.WriteLine(num1 / num2);
                    break;
                case '*':
                    ans = num1 * num2;
                    Console.WriteLine(num1 * num2);
                    break;
            }
    

    【讨论】:

    • 你的更好,我只是 Regex 的新手:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多