Ich versuche, Kommentare, Leerzeilen und zusätzliche Leerzeichen in einer Textdatei zu entfernen, dann die verbleibenden Elemente zu tokenisieren. Jedes Token benötigt ein Leerzeichen davor und danach.Tokenize Elemente aus einer Textdatei durch Entfernen von Kommentaren, zusätzlichen Leerzeichen und Leerzeilen in C++
exampleFile.txt
var
/* declare variables */a1 ,
b2a , c,
Hier ist, was ab jetzt funktioniert,
string line; //line: represents one line of text from file
ifstream InputFile("exampleFile", ios::in); //read from exampleFile.txt
//Remove comments
while (InputFile && getline(InputFile, line, '\0'))
{
while (line.find("/*") != string::npos)
{
size_t Begin = line.find("/*");
line.erase(Begin, (line.find("*/", Begin) - Begin) + 2);
// Start at Begin, erase from Begin to where */ is found
}
}
Dies entfernt Kommentare, aber ich kann nicht einen Weg, um herauszufinden, zu tokenize scheinen, während dies geschieht.
Also meine Fragen sind:
- Ist es möglich, Kommentare, Leerzeichen und Leerzeilen zu entfernen und alle in dieser while-Anweisung tokenize?
- Wie kann ich eine Funktion implementieren, die Leerzeichen zwischen jedem Token hinzufügt, bevor sie Token werden? Token wie c müssen als c und individuell erkannt werden.
Vielen Dank im Voraus für die Hilfe!
Aus dem Thema: Speichern Sie eine Suche: 'while ((size_t Begin = line.find ("/* "))! = String :: npos)' – user4581301
Off topic: Was passiert, wenn der Block Kommentar nicht auf der endet gleiche Linie? – user4581301
Und noch ein Offthema: Denken Sie darüber nach, was passieren wird, wenn das Programm das/* in 'while (line.find ("/* ")! = String :: npos)' findet. – user4581301