Zahl aus string extrahieren mit substr geht das eleganter ?
-
Hallo,
ich habe einen string der so aussieht:
top:0.01212455cm;
ich möchte nur die Zahl herausextrahieren dazu habe ich mir diese Funktion geschrieben (der string wurde in einem vector gespeichert):
k = (*iv_data).find(":"); i = (*iv_data).find("cm"); string zahl = (*iv_data).substr(k+1,i-(k+1));
Jetzt habe ich irgendwie das dumme Gefühl das ich mir das addieren von 1
also das hier sparen kann:substr(k+1,i-(k+1))
Wie kann man das eleganter lösen ?
mfg,
GroßesTennis
-
hi,
was stellst du dir unter einer eleganteren Lösung denn so vor?
Weiß jetzt nicht, wie es anders gehen sollte.
-
also ich weiss nicht was dich bei der adition von eins stört.
man könntek = ((*iv_data).find(":"))+1; i = (*iv_data).find("cm"); string zahl = (*iv_data).substr(k,i-k);
machen wenn du das hübscher findest. Sonst fällt mir zu deinem Ansatz nichts wirklich viel eleganteres ein.
Wenn man will könnte man natürlich auch ne regex benutzen um die zahl zu catchen in deinem speziellen Fall würde es dann so in der Art funktionieren:
boost::regex expression("([0-9]+\\.?[0-9]+)"); // oder einfach (":(.*)cm") boost::cmatch what; std::string res; std::string str("top:0.01212455cm;"); if(boost::regex_search(str.c_str(), what, expression)){ res.assign(what[1].first, what[1].second); std::cout<<res; }else{ std::cout<<"no match at all\n"; }
nun kann man die Regex ja leicht deinen Anspüchen anpassen.
Wie gesagt ich weiss ja nicht ob du bei deinem Ansatz bleiben willst/musst.
-
Naja unter eleganterer Lösung hatte ich mir eigentlich eine string funktion vorgestellt die mit automatisch die Zahl herausschneidet. Wo man nicht mit substr arbeiten muss. Da string ja sehr viele Elementfunktionen zu verfügung stellt, hatte ich gedacht es gibt schon eine solche Funktion. Macht aber nichts trotzdem Danke