Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查全部用户输入是否已包含在括号中_C# - Fatal编程技术网

C# 如何检查全部用户输入是否已包含在括号中

C# 如何检查全部用户输入是否已包含在括号中,c#,C#,我创建了一个布尔代数简化器。然而,为了做到这一点,我首先创建了一个简化方括号的子例程,为了节省麻烦,我决定只在用户输入表达式的开头和结尾添加方括号,并将其传递给子例程,以减少所需的代码量 我的程序应该只在用户输入的开始和结束处添加括号,如果整个表达式还没有包含在括号中。例如 程序将保留表达式:(A+C•B),因为它被完全封装。代码将封装以下表达式:A+C•B然后是:(A+C•B) 检查表达式是否封装的方法是检查字符串中的第一个字符是否为(以及字符串中的最后一个字符是否为)。这很简单 但是,在这样

我创建了一个布尔代数简化器。然而,为了做到这一点,我首先创建了一个简化方括号的子例程,为了节省麻烦,我决定只在用户输入表达式的开头和结尾添加方括号,并将其传递给子例程,以减少所需的代码量

我的程序应该只在用户输入的开始和结束处添加括号,如果整个表达式还没有包含在括号中。例如 程序将保留表达式:
(A+C•B)
,因为它被完全封装。代码将封装以下表达式:
A+C•B
然后是:
(A+C•B)

检查表达式是否封装的方法是检查字符串中的第一个字符是否为(以及字符串中的最后一个字符是否为)。这很简单

但是,在这样的情况下:
(A+C)•(B+D)
,正如您所看到的,开始字符和结束字符分别是开括号和闭括号,但表达式没有完全封装在括号中。它应该是
((A+C)•(B+D))

我试图创造一个条件,使我能够意识到这种类型的例外情况,并且仍然将括号括起来,但我不确定如何实现。我试着忽略第一个括号,在表达式中每隔一个开括号向一个变量添加一个括号,在变量中每一个闭括号从变量中减去一个括号

如果表达式是完全封装的,则会给出
-1
,但对于上面给出的情况也是如此。我想问一下,是否有人知道我如何去检查一个表达式是否完全封装在括号中,这将适用于所有可能的情况。我想不出一个


我知道没有提供代码,但我认为这是一个合适的问题,因为这样一个网站的问题

您提供了关于具体实现的有限信息,但我假设您的表达式是字符串

如果您考虑一下这个问题,它可以归结为检查表达式中最后一个字符之前的第一个括号是否“闭合”

public static bool IsFullyEncased(string expression)
    {
        if (expression.Length > 1 && expression[0] == '(' && expression[expression.Length-1] == ')')
        {
            // Candidate for a fully enclosed expression: ( .* )
            int openBracketCount = 1;
            for (int i = 1; i < expression.Length - 1; ++i)
            {
                switch (expression[i])
                {
                    case '(':
                        openBracketCount += 1;
                        break;
                    case ')':
                        openBracketCount -= 1;
                        break;

                }
                // Additionally checks for valid expression (in terms of brackets)
                if (openBracketCount <= 0) return false;

            }
            // The last element is a bracket so we must have only 1 open
            if(openBracketCount == 1) return true; 

        }
        return false;
    }
publicstaticbool是完整的(字符串表达式)
{
if(expression.Length>1&&expression[0]='('&&expression[expression.Length-1]='))
{
//全封闭表达式的候选表达式:(*)
int openBracketCount=1;
for(int i=1;iif(openBracketCount)“如果整个表达式还没有包含在括号中,我的程序应该只在用户输入的开始和结束处添加括号”。为什么?
((a))
“完全包含在括号中”?@DourHighArch((a))完全封装在括号中,但额外的括号是多余的,我的程序通过从括号中提取字符串来工作。因此,我需要让字符串完全封装,但只包含一组括号。这正是我所寻找的。我试图理解这背后的前提,因为我不想告诉我们e代码而不理解它。据我所知,这为开括号的变量加1,为闭括号的变量减1,如果表达式完全封装,则计数器在到达最后一个闭括号之前不应达到0。正确吗?