String in verschiedene Begriffe aufspalten
-
Schneller ist nicht unbedigt besser. Dein Code ist unübersichtlich, fehleranfällig und kaum intuitiv zu benutzen.
-
Schneller ist nicht unbedigt besser. Dein Code ist unübersichtlich, fehleranfällig und kaum intuitiv zu benutzen.
1.An welcher Stelle sollen diese 3 Zeilen unübersichtlich sein ?
2.Läuft absolut fehlerfrei !
3.Intuitiv.Übung macht den Meister ...
-
Wenn du die STL nicht benutzt geht es auch noch schneller.
string Dispatch_String(string &source,char sep,int pos) { int prv=0,i=-1; while(pos) { i++; if (source[i]==sep) { pos--; if(pos) prv=i+1; } } return source.substr(prv,i-prv); }
Ist das für dich übersichtlicher ?
-
Ist das für dich übersichtlicher ?
Ja.
Wenn du die STL nicht benutzt geht es auch noch schneller.
Vermutest du das, oder hast du das getestet? Ist der Geschwindigkeitsvorteil überhaupt relevant?
1.An welcher Stelle sollen diese 3 Zeilen unübersichtlich sein ?
int x=-1; <- Was das soll, ist mir nicht wirklich klar
2.Läuft absolut fehlerfrei
Mit fehleranfällig mein ich nicht, dass der Code fehlerhaft läuft, sondern dass man nicht erkennen kann, was er tut. Wenn man das debuggen muss, ist es mit Sicherheit komplizierter, als die Lösung mit den Stringstreams.
3.Intuitiv.Übung macht den Meister ...
Man kann sich das Leben auch selber schwer machen...
Solange dein Code funktioniert, der Benutzer weiss, was er tut, Geschwidingkeit von enormer Bedeutung ist und der Geschwindigkeitsvorteil (falls vorhanden) auch enorm ist, kann man das mit Sicherheit benutzen. Dein Code gibt aber auch nur den Teil bis zum ersten Trennzeichen zurück. Was ist mit den Teilen danach?
-
Mit fehleranfällig mein ich nicht, dass der Code fehlerhaft läuft, sondern dass man nicht erkennen kann, was er tut. Wenn man das debuggen muss, ist es mit Sicherheit komplizierter, als die Lösung mit den Stringstreams.
while(pos--) x=source.find(sep,x)+1;
Solange pos nicht 0 ist setze in x die Position des gefundenen (ab Position x suchen) ',' Trennzeichens + 1.
Vermutest du das, oder hast du das getestet? Ist der Geschwindigkeitsvorteil überhaupt relevant?
Getestet.
Wenn du ständig etwas längere strings auslesen musst (ca 2 MB) und veränderungen der empfangenen strings im Bereich von ms liegen ist Geschwindigkeit immer von Vorteil.Dein Code gibt aber auch nur den Teil bis zum ersten Trennzeichen zurück. Was ist mit den Teilen danach?
Wenn du der Funktion in pos den Wert 2,3,4 usw übergibst bekommst du auch die anderen Teilstrings.
Man kann sich das Leben auch selber schwer machen...
Schwer finde ich diesen Code wirklich nicht.Eine Implementation auch nicht.
-
Solange pos nicht 0 ist setze in x die Position des gefundenen (ab Position x suchen) ',' Trennzeichens + 1.
Man mag drüber diskutieren können, aber ich finde ...
while(getline (begriff, getrennt, ',')){ ...
..einfacher zu verstehen. Im Zweifelsfall: www.cppreference.de oder ein C++ Buch deiner Wahl, dort sollte dann etwas über getline stehen.
Wenn du ständig etwas längere strings auslesen musst (ca 2 MB) und veränderungen der empfangenen strings im Bereich von ms liegen ist Geschwindigkeit immer von Vorteil.
Wie schon erwähnt, für bestimmte Anwendungsfälle mag die stringstream Version unzureichend sein, allerdings sind 2MB Strings auch alles andere als gängig. Es kommt halt immer auf den Anwendungsfall an.
Wenn du der Funktion in pos den Wert 2,3,4 usw übergibst bekommst du auch die anderen Teilstrings.
Muss man aber wissen. Also kannst du ja noch eine Doku zu deiner Funktion schreiben.
Schwer finde ich diesen Code wirklich nicht.Eine Implementation auch nicht.
Das ist immer Ansichtssache. Nur ich stelle mir immer die Frage, wieso man dann in C++ statt in C programmieren sollte, wenn man die gebotenen Features eh nicht nutzt.
-
Nur ich stelle mir immer die Frage, wieso man dann in C++ statt in C programmieren sollte, wenn man die gebotenen Features eh nicht nutzt.
Wenn du in bestimmten Fällen schneller bist, bzw es dir anderweitig Vorteile bringt ist doch gegen reines C nichts einzuwenden.
Manche Sachen lassen sich schneller in C lösen als mit C++.
Andersherum möchte man die Funktionalität der STL auch nicht missen.
C und C++ beissen sich nicht.
Immer Anwendungsspezifisch.
-
röhrich schrieb:
Manche Sachen lassen sich schneller in C lösen als mit C++.
das ist falsch. oder haste ne bestimmte sache im auge, die du mir zeigen möchtest?
-
CarstenJ schrieb:
Das ist immer Ansichtssache. Nur ich stelle mir immer die Frage, wieso man dann in C++ statt in C programmieren sollte, wenn man die gebotenen Features eh nicht nutzt.
//wo ist hier der unfug? void printStrlen(char* x) { cout<<string(x).size()<<endl; }
-
Manche Sachen lassen sich schneller in C lösen als mit C++.
das ist falsch. oder haste ne bestimmte sache im auge, die du mir zeigen möchtest?
Von mir falsch formuliert.
Sollte heissen: Es ist manchmal schneller auf die STL zu verzichten.
-
@Volkard:
Ich verstehe jetzt nicht, was du damit sagen willst?!
-
Was spricht gegen die C Version:
[code]
void printStrlen(char* x)
{
printf("%i",strlen(x));
}Ist ebenfalls nachweisbar um einiges schneller als C++:
void printStrle(char* x)
{
cout << string(x).size();
}
[cpp]
Mir igst klar, das du mit deinem Code die Möglichkeiten der string Methoden zeigen wolltest.
-
röhrich schrieb:
@Volkard
Was spricht gegen die C Version:
...strlen(x)...nix. du hast den unfug, nach dem ich gefragt habe, gefunden.
-
Mannomann, so ein einfaches Problem und dann wird hastenichgesehn eine Grundsatzdiskussion C/C++ draus...
Meine Erfahrung als relativer njubie ist, dass die Geschwindigkeit in den meisten Fällen sekundär ist, wenn ich ein Programm entwickle. Viel wichtiger ist Übersichtlichkeit (wegen Debugmöglichkeiten) und dass ich den Code schnell lesen und verstehen kann, wenn ich ein Jahr später draufschaue. Das ist dann bei mir meistens die STL-Variante. Wer mehr C-Erfahrung hat, dem gehts vielleicht anders...?
-
Das war ja noch gar nix. Da gibts noch andere Threads, wo es wirklich um Kleinigkeiten ging, über die 5 Seiten lang diskutiert wurde. Aber gerade diese Kleinigkeiten machen ja einen guten Programmieren aus