Kurioses mit string.find() bzw. wstring.find()



  • Na das ist ja eine kuriose Lösung, die sich ein wohl perverser MS-Entwickler ausgedacht hat 😮 nicht der Returnwert an sich (wie man das sonst annehmen würde) sagt was über das Ergebnis der Suche aus sondern nur wenn man ihn mit std::string::npos vergleicht, ansonsten stehen da irgendwelche astronomisch hohen Zahlen, mit denen man nix anfange kann. Sowas Bescheuertes, da kommt man nicht mal eben so drauf ...



  • Und das hat nix mit C++/CLI zu tun. Lern den Unterschied.

    Edit:
    Und da hat MS wohl nur wenig damit zu tun. Das betrifft ISO C++ und damit das C++ Standard Committee. Abhilfe schafft hier einfach die Doku lesen.



  • Nun werd mal nicht gleich pampig 🕶 ich habe die Doku gelesen, seit Wochen tu' ich doch nix anderes, aber oft hilft sie nicht richtig weiter, warum ist wohl sonst das web voll Fragen zu sowas.

    Na dann war es eben nicht ein perverser MS-Programmierer sondern ein anderer Perverser ... oder findest du diese Lösung etwa "normal" im Sinne von "das wird bei C++ gewöhnlch so gemacht"?

    int i = str.find(L"X", 0); //suche erstes "X" in str ab erster Position
    if (i == string::npos) //nicht gefunden
    if (i != string::npos) //gefunden, Startindex ist in i

    Was für ein Käse ... 😃



  • Du sollst auch die Position nicht in int speichern, weil der Rückgabetyp von std::string::find(..) ein anderer ist, nähmlich std::string::size_type und das wiederum ist üblichweise als std::size_t definiert - das braucht einem aber nicht zu interessieren.

    Am besten verwendet man hier auto .



  • "int i" oben war auch Quatsch (Gewohnheit halt), std::wstring::size_type ist richtig und hatte ich auch. hmmmm, das mit auto muss ich mir mal näher ansehen


Log in to reply