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