Логическая обработка нескольких (длинных) True / False строк - PullRequest
0 голосов
/ 13 марта 2020

Всем доброго времени суток.

Я вызываю функцию для строк длиной до 2000 символов и выглядит как

cB = "-(1/0)+((1+1)/-(0+0+1)+1)"
cB = "0+(1/0/1)+(1/0/0/0/0/1)"
cB = "1/1/1/1/1/0/0/01/1/0/01/1/00/0/0/1/1/0/0/10"

с:

1: TRUE 0: FALSE +: logical AND /: logical OR -: logical NOT

Как видите, она строго математическая: сначала brackets, затем logical AND и, наконец, logical OR

Функция:

String cB = cdb.Value
for (int m = 0; m < 10; m++)
        {
            if (cB.Length == 1)
            {
                break;
            }
            else
            {
                cB = cB.Replace("01", "0").Replace("10", "0").Replace("11", "1").Replace("00", "0");
                cB = cB.Replace("-0", "1").Replace("-1", "0");
                cB = cB.Replace("(0)", "0").Replace("(1)", "1").Replace("(-0)", "1").Replace("(-1)", "0");
                for (int n = 0; n < 10; n++)
                {
                    if (!cB.Contains("+"))
                    {
                        break;
                    }
                    cB = cB.Replace("0+0", "0").Replace("1+1", "1").Replace("0+1", "0").Replace("1+0", "0");
                    cB = cB.Replace("(0)", "0").Replace("(1)", "1").Replace("(-0)", "1").Replace("(-1)", "0");
                }
                for (int p = 0; p < 10; p++)
                {
                    if (!cB.Contains("/"))
                    {
                        break;
                    }
                    cB = cB.Replace("0/0", "0").Replace("1/1", "1").Replace("0/1", "1").Replace("1/0", "1");
                    cB = cB.Replace("(0)", "0").Replace("(1)", "1").Replace("(-0)", "1").Replace("(-1)", "0");
                }
            }
        }
        if (cB == "1")
        {
            result = 1;
        }
        else if (cB == "0")
        {
            result = 0;
        }
        else
        {
            result = 9;
        }

Желаемый результат из трех приведенных строк: 0 0 1

Моя проблема в том, что функция действительно медленная. Поэтому я прошу вас помочь мне, пожалуйста:)

Я забыл упомянуть, что я абсолютный новичок в C#

...