Hallo zusammen,
Ich muss ein Programm schreiben dass Klammerausdrücke auf die korrekte Schreibweise prüft.
Ich schiebe also die Klammer erstmal auf einen Stack und lese die einzelnen Zeichen schrittweise aus, und erhöhe/verringere einen Zähler bei offener/geschlossener Klammer.
Mein Problem ist dass z.b. ")(" als richtig angegeben wird da erst nach Durchlauf der kompletten Schleife der Zähler auf 0 geprüft wird. wenn ich aber die "if (count == 0)" Bedingung in die foreach schleife schreibe passiert garnichts.
Wäre für eine kleine Hilfe sehr dankbar
Ich muss ein Programm schreiben dass Klammerausdrücke auf die korrekte Schreibweise prüft.
Ich schiebe also die Klammer erstmal auf einen Stack und lese die einzelnen Zeichen schrittweise aus, und erhöhe/verringere einen Zähler bei offener/geschlossener Klammer.
Mein Problem ist dass z.b. ")(" als richtig angegeben wird da erst nach Durchlauf der kompletten Schleife der Zähler auf 0 geprüft wird. wenn ich aber die "if (count == 0)" Bedingung in die foreach schleife schreibe passiert garnichts.
Wäre für eine kleine Hilfe sehr dankbar
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Console.WriteLine("Bitte Klammerausdruck eingeben");
string str = Console.ReadLine(); // Klammerausdruck einlesen
char[] ch = str.ToCharArray();
int count = 1;
Stack<char> myStack = new Stack<char>();
foreach (char c in str) // Klammerausdruck auf Stack schieben
{
myStack.Push(c);
}
foreach (char c in myStack) // Klammern prüfen und Zähler erhöhen/verringern
{
if (c == ')')
count -= 1;
else if (c == '(')
count += 1;
}
if (count == 0)
Console.WriteLine("Der Klammerausdruck ist falsch");
else
Console.WriteLine("Der Klammerausdruck ist richtig");
Console.WriteLine(count); // Dummy um zu sehen ob richtig gezählt wird
Console.ReadKey();
}
}