Leerzeichen in String
-
Hallo,
ich hab ein kleines Problem mit meinem C++ Programm.
Und zwar lese ich eine Datei Zeilenweise ein.
Die Datei sieht folgendermaßen aus:09801 01 Text
131 01 Text
314 00 TextWenn ich jetzt diese Zeile mit getline einlese hab ich es in einer Variablen vom Typ std::string.
Jetzt möchte ich die Position des Textes finden.
Normalerweise mach ich es so das ich dann mit string.find("01") die Position finde und dann etwas dazu zähle.Das klappt eigentlich auch aber mein Problem ist das z.b. in der ersten Zeile ein 01 auch vorne vorhanden ist und er somit mir die falsche Position gibt.
Ich hab es versucht mit string.find(" 01 ") zu suchen aber er ignoriert die Leerzeichen.
Also hab ich gedacht das es für die Leerzeichen vielleicht auch ein Zeichen wie z.b. \n für den Zeilenumbruch gibt.
Doch leider ist mir keins bekannt.
Über jede Hilfe würde ich mir sehr freuen.
MFG
mkbm
-
ich weiß nicht wie Du das gemacht hast aber bei mir gibt
string s("09801 01 Text"); string::size_type pos = s.find("01");für pos = 3
und bei
string s("09801 01 Text"); string::size_type pos = s.find(" 01 ");für pos = 5
-
Hi,
danke für die Antwort.
Hm, ok. Es scheint wohl ein dummer fehler von mir gewesen zu sein.
Ich glaub jetzt funktioniert es bei mir auch.Das kommt wohl vor wenn man seit 3 Nächte am Projekt arbeitet und nicht zum schlafen kommt.
Tut mir leid für die Frage. Sollte ich aber dennoch Probleme haben werde ich mich nochmal melden.
MFG
mkbm
-
hat std::string nicht eine findlastof Funktion?
Würde diese nicht reichen?
-
find_last_of und ja.
-
mkbm schrieb:
.. lese ich eine Datei Zeilenweise ein.
Die Datei sieht folgendermaßen aus:09801 01 Text
131 01 Text
314 00 TextWenn ich jetzt diese Zeile mit getline einlese hab ich es in einer Variablen vom Typ std::string.
Jetzt möchte ich die Position des Textes finden. ..
Es ist meines Erachtens einfacher, gleich das zu lesen, was Du nachher auch haben willst und nicht den Umweg über den String zu machen. Dann entfällt auch Dein konkretes Problem mit dem find("01").
Hier könnte das ganze so aussehen:#include <iostream> #include <iomanip> #include <fstream> #include <string> int main() { using namespace std; ifstream quelle( "input.txt" ); if( !quelle.is_open() ) { cerr << "Fehler beim Oeffnen der Datei" << endl; return -1; } string txt; int a, b; while( getline( quelle >> a >> b >> ws, txt ) ) // 'ws' sorgt dafür, das 'txt' mit einem Nicht-Space-Zeichen beginnt { cout << ">" << setw(6) << a << " " << setw(2) << b << " " << txt << endl; } return 0; }Falls die führenden Nullen bei den Zahlen erhalten bleiben sollen, so tausche in der Zeile 16 den Typ int durch std::string aus - also
string a, b;Gruß
Werner