stringvergleich ohne strncmp



  • Nur mal so zur Original Frage..
    Ich denke, die Aufgabenstellung kommt von hier (Aufgabe Nr. 😎
    und hier wurde sie bereits sehr gut beantwortet. Falls es den OP noch interessiert.



  • Bashar schrieb:

    RHBaum schrieb:

    s.size() ist auch bei M$ im nachhinein 11 ...

    Das sollte Beweis genug sein, dass der String nicht kürzer wird. Der Standard verlangt übrigens, dass operator<< für string so implementiert ist, dass s.size() Zeichen ausgegeben werden (es sei denn man hat mit Stream-Manipulatoren die maximale Ausgabebreite verkleinert). => Bug in deiner Library.

    Das hat zwar nichts mit dem Thema zu tun, aber:
    wie kann man mit den Manipulatoren die maximale Ausgabebreite verkleinern? Ich dachte sowas wie width gibt immer die *minimale* Breite an. Ist die Länge der Ausgabe aber größer, so wird der Manipulator ignoriert. Oder täusche ich mich jetzt völlig?



  • Ich hab das einfach aus diesem Satz rausgenommen:

    21.3.7.9 schrieb:

    inserts characters as if by calling os.rdbuf()->sputn(str.data(),
    n), padding as described in stage 3 of _lib.facet.num.put.virtuals_,
    where n is the smaller of os.width() and str.size()

    Vielleicht ist da auch noch ein Fehler drin (hab ja immer nur Drafts), und das heißt in Wahrheit "bigger"?



  • @Bashar
    Im Standard steht auch "smaller". Allerdings verwirrt mich das alles ein bischen. In Josuttis' "The C++ Standard Library" steht zum Thema width z.B.:
    "Note that the field width is never used to truncate output. Thus you can't specify a maximum field with."

    Josuttis schreibt zum Thema operator<< (ostream& strm, const string& str):
    "Writes the characters of str to the stream strm. If strm.width() is greater than 0, at least width() characters are written and width is set to 0".

    width ist also immer ein Minimum und so ähnlich habe ich das bisher überall gelesen.



  • Ich denke die Frage ist geklärt: Es wird in Kürze eine neue Ausgabe des Standards geben, weil die Errata-Liste gar zu lang wird. Irgendwo bei Herb Sutter oder so gibt es ein revisions.pdf, was im einzelnen die Unterschiede aufzählt (ich hab nur das pdf, finde auf die schnelle keinen Link). Eine der Korrekturen findet sich im Abschnitt 21.3.7.9, und ersetzt just dieses «smaller» durch «larger».



  • Bashar: Bei Andrew Koenig um genau zu sein (hat er in comp.std.c++ gepostet).
    http://www.acceleratedcpp.com/authors/koenig/c++std/revisions.pdf


Anmelden zum Antworten