bir aritmetik dize parantez symmerty denetleniyor:Böyle bir dize verilen kontrol etmek istiyorum en iyi şekilde
(a[i]+{-1}*(8-9))
Geçerli vasıta geçerlidir: Tamam
([]{}())
, ve Geçerli değil:
{([[}))
Bunu yığınlar aracılığıyla yapmaya çalışıyorum.
İlk olarak, bu 3 parantezin herhangi bir dirseğini ayıklayın ve geriye doğru itin. İkinci yığın bir kez daha varsa o kadar itin:
( [ ] { } ( ) )
İlk yığın alır:
) ] } )
ve İkinci yığını alır:
) } ] )
Şimdi mantık kısmını gelir.
Gerçekten çok çirkin bir çözüm buldum. İdeal nedir?
public static string aritmethic { get; } = "(a[i]+{-1}*(8-9))";
Stack<char> original = new Stack<char>();
Stack<char> temp = new Stack<char>();
: İşte benim arithmetric dize ve 2 binmektedir, neyse
(ve çalışma olduğundan benim çözüm sonrası yapmayın lütfen, henüz sadece dağınık ve bok ve uzak "ideal" bir)
public void PushToOriginal()
{
for (int i = 0; i < aritmethic.Length; i++)
{
if ((aritmethic[i] == '{'))
{
original.Push('}');
}
else if (aritmethic[i] == '[')
{
original.Push(']');
}
else if (aritmethic[i] == '(')
{
original.Push(')');
}
}
}
ikinci yığın itme:
public void PushToTemp()
{
for (int i = 0; i < original.Count; i++)
{
temp.Push(original.Pop());
}
}
Burada
ilk yığın ters itmeVe şimdi bunun arkasında iyi bir mantığa ihtiyacım var:
public void Checker()
{
//Logic here
/*
if (temp.Peek() == ....)
temp.Pop();
*May cause an error
*/
if (temp.Count == 0)
Console.WriteLine("Aritmethic Matches!");
else
Console.WriteLine("Aritmethic does not Match!!");
}
}
Umarım sorum hakkında yeterince açıkım. Teşekkürler! BTW, Gerçekten çok CSharp için taze, bu yüzden bana hiçbir sert!
Sormaya çalıştığınız soruyu anlamadım mı? Çirkin bir çözümün var, ama çalışıyor mu? Daha iyi bir çözüm mü arıyorsun? –
Gerçekten. Çözümüm doğrudan Yığınların gücü ile uğraşıyordu. Daha çok baypas etmek ve etrafta dolaşmak gibi. Çözümünüzde – N3wbie