auf anfang eines sring matchen
-
hallo,
ich lese ein file ein und möchte über alle leerzeilen und kommentare hinwegspringen ...
dazu muss ich aber jede zeile am anfang vergleichen..wie kann ich den prinzipiell einen string auf die anfangs character testen?
string.start oder sowas?oder sind regular expressions die bessere wahl für mein vorhaben?
-
str[0]

-
bool isemptyline(string in){ for(int i = 0; i<in.size(); i++){ if (string.c_str()[i] > 32) return false; } return true; }Die Funktion sollte testen, ob der String den du übergibts "normale" Zeichen enthält.
Gibt false zurück, wenn es einen Buchstaben oder ähnliches findet.
-
ja er will aber nur testen ob die zeile gerade leer ist oder kommentar enthält
wenn du zeilenweise einliest, dann prüfe ( ob leerzeile )
if( !currentLine.IsEmpty() ) { if ( !ContainComment( currentline ) ) { // ja ich bin keine leerzeile und enthalte keinen kommentar } } // ob kommentar ist könnte man so überprüfen bool ContainComment( const string &str ) { bool bReturn = true; if( str.Find("//") { // hier dein argument wie man comments definiert, hier mal c++ like bReturn = false; } }
-
ups
sollte natürlich
bool ContainComment( const string &str ) { bool bReturn = true; if( str.Find("//") { // hier dein argument wie man comments definiert, hier mal c++ like bReturn = false; } return bReturn; // <<<------ hat gefehlt :( }statt
// ja ich bin keine leerzeile und enthalte keinen kommentar
machst du z.b.
.push_back
oder
.SaveMeoder so was in der art
-
Gut mit den Kommentaren muss man die Funktion erweitern.
@ mrsTux Außerdem kann es sein, dass // in einem String steht, also muss man das auch noch erkennen.
int irgnore_line(string in){ int back; for(int i = 0; i<in.size(); i++){ if (string.c_str()[i] > 32) { if ( ( string.c_str()[i] == '/' ) && (string.size > i) && (string.c_str()[i + 1] == '/') ) return 2; else return 0; } } return 1; }So erkennt man ob es ein Leerzeile (return 1), eine Kommentarzeile (return 2) oder eine Textzeile (return 0) ist. Bei mehrzeiligen Kommentaren ala "/*" müsste man noch eine Funktion schaffen, die erkennt, dass ein Kommentar aufhört.
-
bool ContainComment( const string &str ) { bool bReturn = true; if( str.Find("//") { // hier dein argument wie man comments definiert, hier mal c++ like bReturn = false; } return bReturn; // <<<------ hat gefehlt :( }
bool ContainComment(const string &str) { return str.Find("//"); }
-
imhotep schrieb:
Gut mit den Kommentaren muss man die Funktion erweitern.
@ mrsTux Außerdem kann es sein, dass // in einem String steht, also muss man das auch noch erkennen.
if ( ( string.c_str()[i] == '/' ) && (string.size > i) && (string.c_str()[i + 1] == '/') ) return 2;
[/cpp]
1. es war ja nur ein grundprinzip ( das mit den kommentaren muss man halt sprachspez anpssen
2. soviel ich weiss heisst Find("//"); das // hintereinander stehen muss. und das prüfst du ja mit[i] = "/" und [i+1] = "/"
und das ist überflüssig
ausser string würde anders als Cstring sein, was ich bei einer find fkt nicht glaube