string zerlegen
-
Habe eine Funktion zum zerlegen eines strings gebaut.
string Separator(string sSourceText,char cSeparator,int iPos) { int x; while(iPos--) x=1+sSourceText.find(cSeparator,x); return sSourceText.substr(x,sSourceText.find(cSeparator,x)-x); }
Gibt es eine schnellere bzw bessere Lösung dafür ?
-
ohne eine semantikspezifikation kann man nicht sagen, ob ein code irgendetwas korrekt macht. die uninitialisierte verwendung von x laesst dies trotzdem unwahrscheinlich erscheinen.
edit: es ist auch nicht nett, in parameter zu veraendern. tu besser ein const davor, dann kann das nicht passieren.
edit: und den string per const& uebergeben. und funktionen fangen meist mit einem kleinen buchstaben an. und ungarische notation ist out.
[ Dieser Beitrag wurde am 30.06.2003 um 13:12 Uhr von PeterTheMaster editiert. ]
[ Dieser Beitrag wurde am 30.06.2003 um 13:13 Uhr von PeterTheMaster editiert. ]
-
Original erstellt von PeterTheMaster:
**edit: es ist auch nicht nett, in parameter zu veraendern. tu besser ein const davor, dann kann das nicht passieren.
**also ich finde, dass iPos gut verwendet wird.
wozu sollte man noch eine zusaetzliche temporaere variable brauchen??
-
du kannst dir ja nochmal die stringfkt strtok() anschauen, die ist recht net zum zerlegen von strings
-> warum nicht das benutzen, was es schon gibt?
-
Also funktionieren tut der Code.
Wenn ich nur den Zeiger an die Funktion übergebe, habe ich nur das Problem, das ich nicht mit find auf den string zugreifen kann.
Dafür müßte ich lokal einen string deklarieren, in den ich dann den Inhalt der übergebenen Adresse kopiere oder liege ich da falsch ?
-
@<VesaMan>
Damit habe ich die gleiche Funktion auch schon gebaut, ist allerdings auch nicht schneller,besser.String Separator(String sSourceText,String sSeparator,int iPos) { char *p=strtok(sSourceText.c_str(),sSeparator.c_str()); while(iPos---1)p=strtok(NULL,sSeparator.c_str()); return p; }
-
shade: das ist eine prinzipielle erwaegung und ist wie immer bei minimalbeispielen nicht einzusehen.
wenn die funktion komplexer waere und man spaeter (wartung) noch was einfuegen will, kuckt man in die parameterliste und arbeitet mit den parametern. wenn die sich dann geaendert haben, pech. erleichtert einfach die wartung/erweiterung.
-
Original erstellt von <Stefan>:
Also funktionieren tut der Code.
Wenn ich nur den Zeiger an die Funktion übergebe, habe ich nur das Problem, das ich nicht mit find auf den string zugreifen kann.
Dafür müßte ich lokal einen string deklarieren, in den ich dann den Inhalt der übergebenen Adresse kopiere oder liege ich da falsch ?Du kannst dann einfach sSourceText->find(...) benutzen! Allerdings würde ich dir wie PeterTheMaster auch zu einer konstanten Referenz raten!
-
Original erstellt von PeterTheMaster:
wenn die funktion komplexer waere und man spaeter (wartung) noch was einfuegen will, kuckt man in die parameterliste und arbeitet mit den parametern. wenn die sich dann geaendert haben, pech. erleichtert einfach die wartung/erweiterung.Funktionen sollen doch möglichst einfach und kompakt gehalten werden. Wenn man den Überblick verliert, wo man die Parameter verändert hat, ist die Funktion zu groß geraten und sollte aufgeteilt werden.