Ich zähle "echte" Wörter, sprich der Algorithmus testet nicht nach Leerzeichen, sondern nach allen Zeichen, die NICHT in einem Wort vorkommen können.Xin hat geschrieben:Er hat eine sehr scharfe Beschreibung von dem, was ein Wort ist.cloidnerux hat geschrieben:Und ein Dirty Oerti, der mehr Wörter zählt als wir.
Die Aufgabenstellung war Wörter in einem String zu zählen, die zwischen Leerzeichen sind, es ging nicht um Sätze und auch nicht um Zeilenwechsel. "Dies ist ein\nSatz." sind drei Worte: "Dies", "ist", "ein\nSatz."
Die einzigen Trennsymbole sind Stringanfang, Stringende ('\0') und das Leerzeichen.
Wenn ich das nur zu Leerzeichen ändere, dann braucht mein Code auf einmal aber DEUTLICH länger?
Kann mir das jemand erklären?! -,-
Von daher:
Xin hat geschrieben:Kann man gerne ausprobieren, aber dafür brauchen wir noch eine eindeutige Methode, um die Performance zu testen. clock() ist nur ein Näherungswert und wenn zur Ausführung des Programms swappen muss, dann bringt das nicht mehr viel.
Er entfernt führende Leerzeichencloidnerux hat geschrieben:Was soll hier geschehen loliger:

Das halte ich für eine sehr gute Idee!cloidnerux hat geschrieben:Ich hab nix dagegen. Vlt können wir dann gemeinsam einen Algorithmus entwickeln, der an sich schneller ist.
Dann probiere jetzt doch mal:lolliger hat geschrieben:Ich habe jetzt das Problem so gelöst, dass jetzt sogar " Ich bin . " möglich ist:
Code: Alles auswählen
" Ich bin es"

Meine Überlegung war im Übrigen, auszunutzen, dass wir hier mit (min) 32 bit Rechnern arbeiten.
Allerdings hat mich das gestern schon so verwirrt, dass meine Variante, die nur noch 1 Vergleich hat (und ansonsten identisch ist) plötzlich viel langsamer ist als die Variante mit ... 4 .. ? Vergleichen, dass ich das erstmal hab ruhen lassen.
Problem daran ist ja auch, dass man entweder hoffen muss, nicht in einen Bereich zu kommen, aus dem man nicht lesen darf.
Oder man muss die Länge des Strings kennen, aber das kostet eben auch Zeit.