C# 如何检查括号是否相同
我想检查输入字符串是否包含相同数量的开/闭括号。如果是,则打印为真,否则为假。我已经写了这段代码,但有一些错误,有人可以帮助吗 如果我输入一个字符串“()”,该字符串以开括号开始,以闭括号结束,则可以正常工作,但如果我输入“()”,则它仍会打印出true?。输出应为:C# 如何检查括号是否相同,c#,C#,我想检查输入字符串是否包含相同数量的开/闭括号。如果是,则打印为真,否则为假。我已经写了这段代码,但有一些错误,有人可以帮助吗 如果我输入一个字符串“()”,该字符串以开括号开始,以闭括号结束,则可以正常工作,但如果我输入“()”,则它仍会打印出true?。输出应为: () = true (())=true ()) = false (() = false )( = false )(() = false etc... 谢谢你的帮助 编辑: 使用系统; 公共课程 { 公共图书馆 { 勾选括号(
() = true
(())=true
()) = false
(() = false
)( = false
)(() = false
etc...
谢谢你的帮助
编辑:
使用系统;
公共课程
{
公共图书馆
{
勾选括号(“()”);
}
公共void检查圆括号(字符串输入圆括号){
int开括号=0;
int闭括号=0;
for(int i=0;i < /代码> 如果有比关闭更大的数目,那么它应该返回一个false,对吗?所以,你可以只在循环的中间加上:
if (closeParentheses > openParentheses) {
Console.WriteLine("false");
}
如果有比封闭更大的闭合数,它应该返回一个假,对吗?所以,你可以在循环的中间加上:
if (closeParentheses > openParentheses) {
Console.WriteLine("false");
}
不必计算开/闭括号,您可以检查它们的顺序
public void CheckParentheses(string inputParentheses)
{
// Level counter
int parenLevel = 0;
for (int i = 0; i < inputParentheses.Length; i++)
{
// Open always good, increment the level
if (inputParentheses[i] == '(')
parenLevel++;
else if (inputParentheses[i] == ')')
parenLevel--;
// Closing good, but only if the level doesn't drop under zero
if (parenLevel < 0)
{
Console.WriteLine("false");
return;
}
}
// At the end of the loop, the level should always be zero
if(parenLevel != 0)
Console.WriteLine("false");
else
Console.WriteLine("true");
}
public void检查圆括号(字符串输入圆括号)
{
//液位计
int parenLevel=0;
for(int i=0;i
您可以检查其顺序,而不是计算开/闭括号
public void CheckParentheses(string inputParentheses)
{
// Level counter
int parenLevel = 0;
for (int i = 0; i < inputParentheses.Length; i++)
{
// Open always good, increment the level
if (inputParentheses[i] == '(')
parenLevel++;
else if (inputParentheses[i] == ')')
parenLevel--;
// Closing good, but only if the level doesn't drop under zero
if (parenLevel < 0)
{
Console.WriteLine("false");
return;
}
}
// At the end of the loop, the level should always be zero
if(parenLevel != 0)
Console.WriteLine("false");
else
Console.WriteLine("true");
}
public void检查圆括号(字符串输入圆括号)
{
//液位计
int parenLevel=0;
for(int i=0;i
公共静态布尔校验圆括号(字符串输入圆括号)
{
如果((InputParents.Length%2)!=0 | | InputParents[0]==')'| | InputParents[InputParents.Length-1]=='(')
返回false;
for(int i=0;i
公共静态布尔校验圆括号(字符串输入圆括号)
{
如果((InputParents.Length%2)!=0 | | InputParents[0]==')'| | InputParents[InputParents.Length-1]=='(')
返回false;
for(int i=0;i
首先,我们必须清楚地了解我们试图证明字符串的哪些属性。这需要一些时间、思考和想象力
我们可以说字符串必须是S描述的语言的句子→ (“S”)Sε
,在这种情况下,我们的任务是创建一个解析器。当且仅当解析器接受该字符串时,该字符串才有效
另一种方法是按从左到右的顺序将“(“as push and”)”解释为堆栈的pop。然后,当且仅当所表示的程序没有弹出空堆栈并且也以空堆栈终止时,字符串才有效。我们可以通过运行程序并观察状态来测试这一点
另一种方法是将“(”和“)”字符串分别解释为“1”和“-1”的序列。这与堆栈解释类似——通过Peano数可以看出相似性。然后,当且仅当不存在小于零的前缀和且总和为零时,该字符串才有效
我将解释如何在C#中实现整数解释。首先,开始定义函数,将字符串作为输入,布尔答案作为输出
bool AreParensBalanced(字符串输入){…}
首先将括号解释为整数
var expressed=input。选择(c=>c==”(“?1:-1);
接下来查找前缀和。这里我转到IObservable,因为没有为IEnumerable定义扫描-您可以为IEnumerable定义扫描,但我更愿意利用现有的实现
var prefixSums=expressed.ToObservable().Scan(0,(a,b)=>a+b.ToEnumerable()
现在求出总数
var totalSum=expressed.Aggregate(0,(a,b)=>a+b);
知道前缀和和和的总数,就可以找到答案
返回前缀。All(x=>x>=0)和&totalSum==0;
请注意,“不存在一个x使得p(x)为真”与“对于所有x,而不是p(x)为真”相同,这就是我如何从规范中提出all(x=>x>=0)
。首先我们必须清楚地了解我们试图证明的字符串的属性。这需要一些时间、思考和想象