Hi.
Kann mir vielleicht jemand bei der Aufgabe helfen?
Aufgabe
Schreiben Sie mit Hilfe eines Stacks ein Programm, das einen Ausdruck auf korrekte Klammerung testet; dabei sollen die Klammern ()[]{} berücksichtigt werden. Stringliterale und Kommentare sollen dabei ignoriert werden. Ist ein Ausdruck nicht korrekt geklammert, soll Ihr Programm die mögliche Fehlerursache ausgeben. Testen Sie Ihre Implementierung mit Java-Quellcode-Dateien.
Hinweis: Die (geerbte) Methode read(char[] cbuf, int offset, int length) der Klasse java.io.FileReader erlaubt das zeichenweise Einlesen von Dateien.
Ansatz
Ich habe mal angefangen ein Programm zu schreiben (1. Teil - Stackprogramm lasse ich weg (das läuft))
Leider weiß ich nicht wie ich das ganze so schreibe, dass Kommentare und Strings ausgelassen werden und wie ich es schaffe, dass am Ende ausgegeben wird, wieviele Klammer gefehlt haben.
Kann mir vielleicht jemand helfen? Bin für alle Tipps offen!
Kann mir vielleicht jemand bei der Aufgabe helfen?
Aufgabe
Schreiben Sie mit Hilfe eines Stacks ein Programm, das einen Ausdruck auf korrekte Klammerung testet; dabei sollen die Klammern ()[]{} berücksichtigt werden. Stringliterale und Kommentare sollen dabei ignoriert werden. Ist ein Ausdruck nicht korrekt geklammert, soll Ihr Programm die mögliche Fehlerursache ausgeben. Testen Sie Ihre Implementierung mit Java-Quellcode-Dateien.
Hinweis: Die (geerbte) Methode read(char[] cbuf, int offset, int length) der Klasse java.io.FileReader erlaubt das zeichenweise Einlesen von Dateien.
Ansatz
Ich habe mal angefangen ein Programm zu schreiben (1. Teil - Stackprogramm lasse ich weg (das läuft))
Code:
import java.io.*;
public class Klammer2
{
public static void main(String args[])
{
Stack klammerstack = new Stack(10);
char[] buff = new char[100];
try
{
FileReader in = new FileReader("TestDrive.txt");
in.read(buff, 0, 100);
}
catch(IOException e)
{
System.out.println(e);
}
try
{
for(int i = 0; i < buff.length; i++)
{
if((buff[i] == '(') || (buff[i] == '[') || (buff[i] == '{'))
{
klammerstack.push(buff[i]);
}
else if(buff[i] == ')')
{
if(klammerstack.top() == '(')
{
klammerstack.pop();
}
else
{
System.out.println("Fehler: ) ohne (");
}
}
else if(buff[i] == ']')
{
if(klammerstack.top() == '[')
{
klammerstack.pop();
}
else
{
System.out.println("Fehler: ] ohne [");
}
}
else if(buff[i] == '}')
{
if(klammerstack.top() == '{')
{
klammerstack.pop();
}
else
{
System.out.println("Fehler: } ohne {");
}
}
}
if(!klammerstack.isEmpty())
{
System.out.println("Stack noch nicht leer");
}
}
catch(StackException e)
{
System.out.println(e + "\ngeschlossene Klammer ohne oeffnende");
}
}
}
Leider weiß ich nicht wie ich das ganze so schreibe, dass Kommentare und Strings ausgelassen werden und wie ich es schaffe, dass am Ende ausgegeben wird, wieviele Klammer gefehlt haben.
Kann mir vielleicht jemand helfen? Bin für alle Tipps offen!