Problem mit Zeilen auslesen
-
Hallo,
wollte mal zu nem Problem eure Meinung hören.
Ich habe eine Zeile, die lautet:exprs=["1";"4+2*s"]Ich will einen Code schreiben der mir die Zahl nach dem ";" ausgibt, in dem Fall die 4.
Mein bisheriger Code sieht aus:
pos1=string.find(";\"")+1; pos2=string.find("+"); pos3=pos2-pos1; string a=string.substr(pos1,pos3);Wenn jetzt aber ein -2 dasteht funktioniert es nicht mehr (exprs=["1";"4-2*s"]). Für den Fall dann mit if. Aber wenn irgenwo anders ein Minus steht, also anstatt 1 eine -1 funktionierts auch nicht mehr (exprs=["-1";"4-2*s"]).
Man könnte auch pos2=string.find("*s") machen und dann Stellen zurückrechnen aber das geht auch nicht, da ja anstatt der 2 auch eine zwei- oder dreistellige Zahl stehen könnte (exprs=["-1";"14-92*s"]).Hat jemand ne Idee oder ne andere Methode wie ich an meine Zahl rankomm? (Im letzten Beispiel an die 14...)
-
Ach quatsch die exprs-Zeile ist ja kein C++-Code.
Sorry. Das ist ein String den ich analysieren will.Ich hoff ihr checkt trotzdem was ich mein.
-
MikeBb schrieb:
Hat jemand ne Idee oder ne andere Methode wie ich an meine Zahl rankomm? (Im letzten Beispiel an die 14...)
Du könntest den String in einen Stringstream schieben. Dann setzt du den Lesezeiger an den Anfang der Zahl (deine pos1). Dann benutzt du den Operator >> zum auslesen einer Zahl. Dieser sollte mit allem klarkommen, was du da haben könntest.
-
MikeBb schrieb:
Ach quatsch die exprs-Zeile ist ja kein C++-Code.
also steht diese Zeile in einer Datei - oder?
Egal wo sie steht, man kann es immer auslesen - z.B. aus einer Datei 'input.txt':
#include <iostream> #include <fstream> int main() { using namespace std; ifstream in( "input.txt" ); // da steht 'exprs=["-1";"-4+2*s"]' drin in.ignore( 999, ';' ); // bis und einschließlich ';' überlesen in.ignore( 999, '"' ); // noch das " überlesen int zahl; if( in >> zahl ) // und dann die erste Zahl im String nach dem ';' lesen cout << "Die Zahl ist:" << zahl << endl; return 0; }.. liefert: 'Die Zahl ist:-4'
Gruß
Werner
-
das geht auch noch hübscher:
#include <iostream> #include <fstream> std::istream& jump2start( std::istream& in ) { return in.ignore( 999, ';' ).ignore( 999, '"' ); } int main() { using namespace std; ifstream in( "input.txt" ); // Inhalt: exprs=["-1000";"-42+27*s"] int zahl1, zahl2; if( in >> jump2start >> zahl1 >> zahl2 ) cout << "Die Zahlen sind: " << zahl1 << ", " << zahl2 << endl; return 0; }liefert: 'Die Zahlen sind: -42, 27'
Gruß
Werner
-
Dankeschön für die Hilfe! Ihr habt mir sehr geholfen!
-
Aber ne kleine Frage hab ich noch.
Die exprs-Zeile steht in nem string drinnen, nicht in einer file.
Geht das auch?Mfg Mike
-
MikeBb schrieb:
Aber ne kleine Frage hab ich noch.
Die exprs-Zeile steht in nem string drinnen, nicht in einer file.
Geht das auch?Mfg Mike
Siehe erste Antwort: Mit stringstream kann man einen String genauso behandeln wie einen (Datei-)stream.
-
MikeBb schrieb:
Aber ne kleine Frage hab ich noch.
Die exprs-Zeile steht in nem string drinnen, nicht in einer file.wie und wo wird dennn dieser String mit seinem Inhalt gefüllt?
fragt Werner
-
Danke jetzt hab ichs. So ist es ja noch leichter die Zeilen zu analysieren. Davor hab ich das alles mit find und substr gemacht.
Die Zeilen wurden vorher mit getline in einen stringvektor gespeichert, deswegen brauch ich stringstream.
Merci an alle