So zerlegt man einen String...
-
mikey schrieb:
Und wenn man schon C++ programmiert, setzte ich ein Mindestmaß an Englischkentnissen voraus, wodurch es durch so ein einfaches Wort wie "excluder", dass sich sowieso aus der deutschen Sprache herleiten lässt, keine Probleme geben dürfte.
Ja, das ist ganz genau der Punkt. Dir scheint einfach nicht klar zu sein was "exclude" heisst.
-
Wenn du hier Code postest, dann musst du mit Kritik rechnen. Da lernt man als Anfänger draus. Zum Beispiel ist es nicht objektorientiert, wenn man jede kleine Hilfsfunktion in eine eigene Klasse packt. Auch den Hinweis auf das using im Header hast du erstmal ignoriert statt zu überlegen warum das nicht so gut sein könnte. Im übrigen finde ich deine Erklärung mit dem Excluder mehr als schwammig. Aber was solls...
-
Ich habe nicht jede kleine Hilfsfunktion in eine Klasse gepackt, im Gegenteíl, es geht mir darum, dass ich meinen eigentlichen Programmcode sauber halten kann, und nicht diese wirren Zeilen einfügen, die den Code nur unübersichtlich machen. Und ich weis auch nicht, wie ich eine Header OHNE Klasse programmieren soll.......
-
mikey schrieb:
Immerhin bin ich ein Anfänger (was ich bis hierhin noch nicht erwähnt habe...)
Echt??? ....darauf wäre wirklich keiner gekommen
.PS:Wenn du etwas weniger klugscheißen würdest,würden die Leute eventuell nicht ganz so hart mit dir ins Gericht gehen.
-
mikey schrieb:
Dann lass ichs halt bleiben. Ihr kritisiert meinen Code zum Teil auch noch leicht abwärtend, immer nur Kritik, blabla, aber was ich mal gut gemacht habe, das schreibt hier keiner.
Du solltest dich von konstruktiver Kritik nicht unterkriegen lassen... für einen Anfänger ist der Code ja nicht schlecht, da gibt's wesentlich schlimmeres - aber du solltest ihn nicht in jeder Hinsicht bis auf's Äußerste gegen Verbesserungsvorschläge verteidigen, insbesondere wenn dir selbst auffallen müsste dass du dazu nicht in der Lage bist. Nutze die Chance lieber etwas zu lernen.
-
mikey schrieb:
Hallo,
Wenn das ein Header ist, gehört kein "using namespace std" rein (meiner Meinung nach gehört das nirgends rein, aber das ist ein anderes
Das ist deine Meinung. Meinungen sind immer anders. Somit kann ich nicht wegen dir das using namespace weglassen.
Dies ist aber keine Meinung, sondern eigentlich allgemeiner Konsens. Das Problem ist, dass du nun jedem der deine Funktion benutzt, diesen namespace aufzwingt. Wo ist das Problem daran? ganz einfach: namespaces sind dafür da, um funktionen und Klassen in logische Abschnitte zu Gliedern. Dadurch, dass "string" im namespace std ist, kann ich auch einen string in namespace "abc" erstellen, der sich etwas mehr an dem orientiert, was ich wirklich brauche.
Aber nun stell dir folgende Situation vor:
#include "exclude.h"//deine datei namespace abc{ class string{ private: std::string str;//alles ok, namespace qualifier benutzt //... public: string exclude(char poi,int pos) { Excluder ex; return ex.exclude(str,poi,pos);//deine Klasse } //... }; //wir wollen ja auch mal "hallo "+"du" schreiben können const string& operator+(const string& a,const string& b);//und kaputt, der compiler weis nicht, welchen string er nutzen soll }Das ist eine Funktion und was eine Funktion ist, soll auch so geschrieben sein. Warum diese Klasse?
Wozu denn überhaupt OOP?! Deiner Aussage nach würde es somit keine OOP geben. Zudem ist das wieder deine persönliche Meinung, kein Muss oder sonst was. Zudem bietet OOP mehr Überblick.
OOP != alles in funktionen packen. Gab dazu erst letztens nen ~30 seitigen thread hier im "Rund um die Programmierung".
Der Name "excluder" sagt mir, daß etwas exkludiert wird. Du sagst aber richtigerweise, daß der String in Einzelteile zerlegt wird. Also eher "splitter" oder so.
Ja das ist richtig. Splitter und excluder haben den selben Sinn. Sieh mal im Wörterbuch nach. "exclude= absondern " "splitting = spaltung" .
Exclude hat die Wortbedeutung "etwas rausnehmen", also eher "entfernen", "ausgrenzen", "aussperren", "ausschließen". Split hingegen bedeuted "teilen", "spalten", "aufteilen". Also nix gleiche Wortbedeutung

Korrigier mal die Einrückung
Danke für den netten Hinweis. Nur Leider hatte ich um eins in der Nacht keine Zeit und keine Lust mehr gehabt, einen 20 - zeiligen Beispielcode einzurücken.
du bewirbst deinen Code, nicht wir. Und dazu gehört nunmal auch das richtige einrücken. Mal davon abgesehen ist das nichtmal ne Minute arbeit bei nem 20 zeiligen Beispielcode

Dann lass ichs halt bleiben. Ihr kritisiert meinen Code zum Teil auch noch leicht abwärtend, immer nur Kritik, blabla, aber was ich mal gut gemacht habe, das schreibt hier keiner.
Gut ist, das du dich traust, deinen Code in ein öffentliches Forum zu stellen.
Was ist an deinem Code gut? Nun, gibt es generell Code, der "gut" ist? Was ist gut in hinsicht auf die Programmierung? Geschwindigkeit? Einfachheit? Konformität mit der vorherrschenden Meinung wie etwas auszusehen hat?
Gut, gemessen an einem Guru? Gemessen an einem Anfänger?
Ist Code jemals gut? Oder ist es damit eher wie mit dem Zeichnen? Immer wenn man meint fertig zu sein, weist einen die Stimme im Hinterkopf darauf hin, dass man ca eine Million details nicht beachtet hat, und dass man am besten nochmal von vorne Anfangen sollte.Sicher, wie Finix sagte: für einen Anfänger sicherlich nicht das schlechteste was wir hier jemals gesehen haben. (Das sag ich als jemand, der in seiner Vergangenheit hier schon einiges an Müllcode gepostet hat). Allerdings kannst du neben der direkten kritik an deinem Code nicht viel mehr erwarten. Etwas schlechtes zu finden ist relativ einfach, dafür bekommt man nach ner weile eine Art Gespür. Bei etwas gutem sieht die Lage anders aus, wie ich grad etwas polemisch ausgedrückt hab ;). Der beste Code ist wohl der, an dem niemand mehr kritteln kann.
-
mikey schrieb:
Achja, irgendwie mache ich in meinem Quellcode mittlerweile schon fast alles falsch: "Zweckentfremdet", "Objektorientiert", "Englischsprachig", "Mangelhaft (was sich jedoch nicht ausschliesen lässt :-D) und noch ein paar Dinge. Aber anstatt mal zu schreiben, hey, das ist zwar ganz nett, aber du könntest das und das besser machen... Immerhin bin ich ein Anfänger (was ich bis hierhin noch nicht erwähnt habe...) und ich finde für diesen Code ist es ganz akzeptabel, natürlich sind noch viele Dinge besser zu machen, was ich ja auch nicht bestreite, aber mittlerweile werden mir ganz banale Dinge vorgeworfen, die doch überall vorkommen. Wer nicht in der Lage ist "exlcuder" zu verstehen, der solls doch einfach lassen. Hätte ich meinetwegen andere kompliziertere Funktionen und Namen, würde ich sie natürlich verständlich benennen. Dann lass ichs halt bleiben. Ihr kritisiert meinen Code zum Teil auch noch leicht abwärtend, immer nur Kritik, blabla, aber was ich mal gut gemacht habe, das schreibt hier keiner. Und es kann mir auch genausogut keiner sagen, dass in diesem Code nichts gutes wäre.

Warum regst Du Dich auf? Du wolltest wissen, was Du besser machen kannst und ich habe mir die Mühe gemacht, Deinen Code anzuschauen und einige konstruktive Kritik aufgezählt. Diese Punkte wurden hier ja auch teilweise in der Diskussion vertieft. Das ist genau das, wofür dieses Forum da ist.
Wolltest Du hören: "Das hast Du aber toll gemacht."? Ich glaube, da hast Du falsche Vorstellungen, wie das in der Welt so geht.
Entschuldigung, daß ich Dir das sagen muß, aber Dein Code ist Fehlerhaft und so gar nicht gut. Aber das wollen wir doch gemeinsam verbessern. Ich würde gerne viel mehr Programmierer sehen, die gutes C++ können. Es ist eine tolle Programmiersprache und ich glaube, daß Du dir richtige Wahl getroffen hast, C++ zu lernen. Und es ist prima, daß Du deinen Code zeigst, so daß Fortgeschrittene sagen können, was Du besser machen kannst. Du solltest aber die Bescheidenheit haben, zu akzeptieren, daß Du als Anfänger nicht so gute Programme schreiben wirst, als ein Experte.
Ich denke, wenn Du am Ball (bzw. an C++) bleibst und Du nach ein oder zwei Jahren den Code nochmals anschaust, wirst Du Dir selbst sagen: "Oh - das war ja wahrlich kein Meisterstück". Hoffentlich wirst Du auch sagen: "Wie schön, daß ich dieses Codestück gepostet habe, so daß ich von den Experten lernen konnte".
Viele Grüsse und viel Erfolg beim Lernen von C++
Tntnet
-
Spacelord schrieb:
mikey schrieb:
Immerhin bin ich ein Anfänger (was ich bis hierhin noch nicht erwähnt habe...)
Echt??? ....darauf wäre wirklich keiner gekommen
.PS:Wenn du etwas weniger klugscheißen würdest,würden die Leute eventuell nicht ganz so hart mit dir ins Gericht gehen.
Ich hab gelesen "[...], würden dir die Leute eventuell nicht ganz so hart ins Gesicht treten."

-
mikey: Spitze! Das hast du einfach toll gemacht.

-
Danke für deine Ironie

ne, also machen wirs so, das wir gemeinsam meinen splitter optimieren.
Das Grundprinzip soll aber auf jeden Fall erhalten bleiben, hauptsächlich der Code soll noch effizienter gemacht werden.Zu Beginn: Könnt ihr mir bitte die Funktionsweise der Methode "find" erklären? Welche Parameter muss ich der übergeben (Stringlänge, Startposition .?) Oder findet sie das gewünschte Wort etwa vollautomatisch!?
Mir fällt jetzt spontan ehrlich gesagt kein besserer Ansatz dafür ein, vielleicht können wir es schrittweise machen. Danach bau ich mal eigenständig die find Methode ein, und ihr sagt mir, ob das O.K ist. Danke schon mal im Vorraus
mikey
-
mikey schrieb:
Zu Beginn: Könnt ihr mir bitte die Funktionsweise der Methode "find" erklären? Welche Parameter muss ich der übergeben (Stringlänge, Startposition .?) Oder findet sie das gewünschte Wort etwa vollautomatisch!?
http://www.cppreference.com/cppalgorithm/find.html
Die Seite solltest du dir bookmarken, da ist die C und C++ Standardbibliothek dokumentiert.
-
Danke!
Aber da ist was:
#include <algorithm>
Soll man das wirklich einbinden? Das gibts doch auch in der string Header !!
-
mikey schrieb:
Danke!
Aber da ist was:
#include <algorithm>
Soll man das wirklich einbinden?
Ja, definitv!
Inkludier immer das, was du brauchst. Verlass dich nicht drauf, dass z.B. iostream dann string (oder string dann algorithm) schon einbinden wird. Die Include-Guards verhindern sowieso, dass etwas mehrfach eingebunden wird, daher brauchst du dir keine Gedanken zu machen, solltest du mal einen Header "zu viel" eingebunden haben.Blöd ist halt nur, wenn du einen nicht eingebunden hast und der dann fehlt. Also bind ihn ruhigen Gewissens ein.
EDIT: Du könntest natürlich auch die find-Membermethode von string verwenden, dann brauchst du algorithm nicht einbinden. algorithm brauchst du nur, wenn du die von mir verlinkte Funktion aufrufen willst.
Sorry, kam grad durcheinander, weil der Thread etwas wirr ist^^
MfG
GPC
-
so nun lass ich mal meine sprechkenntnisse spielen. warum nicht tokenizer? http://de.wikipedia.org/wiki/Tokenizer
ich denke dann weiß jeder um was es geht..ggf. nennst du es dann noch string tokenizer und dann sind alle happy..hoffentlich..
dann machste ne basisklasse drauß, lässt deine nächste string klasse davon erben und schon kannste tokens aus strings herausholen..dann hätten wir auch noch nen bisl OOP..
-
jupp, das wär auch nicht schlecht! (tokenizer)... Möglichkeiten gibt es viele, aber dieses Wort hört sich recht gut an. Zudem gibt es dann noch einen zugehörigen Scanner, der "Parser" gennant wird. So könnte ich eine Methode benennen, die meinen String einliest.
Die letzte Idee mit der Vererbung usw. würde mich auch reizen, allerdings muss ich gestehen, dass ich noch nie etwas vererbt habe. Ich weis zwar, was das bedeutet, aber nicht wie man es anwendet. Da muss ich mich mal schlau machen.
Können wir erst den Code optimieren, und es danach evtl. schön in ne string Klasse packen? Ich versuche jetzt mal den Ansatz mit der find Methode, den Code stell ich gleich rein...