@Lamposksk:
public partial class Form1 : Form
{
A. Stack<char> Källkod = new Stack<char>();
private void btnKontrollera_Click(object sender, EventArgs e)
{
string Parentes = tbxParentes.Text;
B. char[] allowedChars = { '(', ')' };
foreach (char A in Parentes)
{
C. if (Parentes == "(")
{
Källkod.Push(A);
}
D. if (Parentes == ")" )
{
E. if (Källkod.Last() == '(')
{
Källkod.Pop();
}
else
{
Källkod .Push(A);
}
}
}
F. while (Parentes != "");
G. ?
}
}
A.
Eftersom att du har deklarerat Källkod som en egenskap för varje instans av din klass så kommer dess tillstånd bevaras mellan anrop till btnKontrollera_Click()
. Det vore bättre att hantera din stack / räknare inuti funktionens eget scope, på det sättet undviker du bland annat problem med att ha glömt rensa den. Vad händer om kör funktionen flera gånger nu?
B.
Listan deklareras, men används aldrig.
C., D.
Det är viktigt att namnge variabler ordentligt. Vid ett första ögonkast kan de här jämförelserna se rätt ut, men sedan märker vi att ")" är en sträng och inte en char, det kan inte stämma, och Parentes
är ju hela din text och inte det aktuella tecknet A
. Kan du hitta bättre namn för Källkod, Parentes, A
?
E.
Eftersom att Källkod
bara kan innehålla öppningsparenteser räcker det att kontrollera om den inte är tom; är den inte det så kan du ta bort ett element och fortsätta, annars vet du att parenteserna var obalanserade och kan avsluta uppgiften.
F.
Medans Parentes
(hela din text) inte är en tom sträng fortsätt göra ingenting, det är därför ditt program verkar hänga sig. Har du ersatt en do/while med foreach och glömt den här raden?
G.
Vad ska du göra när du är klar? Hur vet du hur det gick?