我正在尝试制作语音识别数学计算器。我真的不知道怎么办

时间:2019-07-25 17:23:38

标签: c#

我制作了一个基本的语音识别器程序,它可以正常工作,但是我被我现在想做的事情困住了。我正在尝试进行经典的数学加法运算等。但是,它用“字符串”加载了语法。我该怎么办?

2 个答案:

答案 0 :(得分:0)

如果我理解您的问题,您已经将声音转换为C#的字符串格式。因此,您只需要创建一个将大小写转换为int格式的switch case函数即可。像这样:

public int textToNumber(text){
     int number = 0;
     switch(text)
     {
        case "one":
           number = 1;
        break;
        case "two":
           number = 2;
        break;
        case "three":
           number = 3;
        break;
        .
        .
        .
     }
}

您可以对这些操作执行相同的操作。让我知道这对您是否有意义。

答案 1 :(得分:0)

您将需要创建一些字符串解析算法,以查找特定的字符串并进行处理。 (如果您在问我想在问什么)

这不是特别漂亮,但是它将为单个字符串完成一个数学问题完成工作:

class Program
{      
    public decimal MathMachine(string input)
    {           
        int indexOfFirstNumber = 0;
        int indexOfOperator = 0;
        int indexOfLastNumber = 0;
        string firstSet;
        string secondSet;
        string operatorCharacter;

        char[] c = input.ToCharArray();

        for (int i = 0; i < input.Length; i++)
        {
            if (char.IsNumber(c[i]))
            {
                indexOfFirstNumber = i;
                break;
            }
        }

        for (int i = 0; i < input.Length; i++)
        {
            if(c[i] == '+' || c[i] == '-' || c[i] == '/' || c[i] == '*')
            {
                indexOfOperator = i;
                break;
            }
        }

        for (int i = indexOfOperator +1; i < input.Length; i++)
        {
            if (!char.IsNumber(c[i]))
            {
                indexOfLastNumber = i;
                break;
            }
        }

        firstSet = input.Substring(indexOfFirstNumber, indexOfOperator - indexOfFirstNumber);
        secondSet = input.Substring(indexOfOperator+1, indexOfLastNumber - indexOfOperator-1);
        operatorCharacter = input[indexOfOperator].ToString();

        if(operatorCharacter == "+")
            return (decimal.Parse(firstSet) + decimal.Parse(secondSet));
        if(operatorCharacter == "*")
            return (decimal.Parse(firstSet) * decimal.Parse(secondSet));
        if(operatorCharacter == "/")
            return (decimal.Parse(firstSet) / decimal.Parse(secondSet));
        if(operatorCharacter == "-")
            return (decimal.Parse(firstSet) - decimal.Parse(secondSet));

        return 0;
    }

    static void Main(string[] args)
    {
        Program program = new Program();
        Console.WriteLine(program.MathMachine("What is 3*4?"));
        Console.ReadLine();
    }

我还应该警告您,此示例中没有检查,因此,如果字符串格式不同或缺少数字或运算符等,则会出错。