Funktion strrchr wird nicht erkannt



  • Hallo liebe Gemeinde.

    Folgenden Beispielcode habe ich auf C++ Reference gefunden:

    /* strrchr example */
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] = "This is a sample string";
      char * pch;
      pch=strrchr(str,'s');
      printf ("Last occurence of 's' found at %d \n",pch-str+1);
      return 0;
    }
    

    Nun wollte ich diesen Code auf C++ transferieren:

    #include<iostream>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    
    int main()
    {
    	std::string str = "Das ist ein einfacher String.\n";
    	std::string * pch;
    
    	pch = strrchr(str,'s');
    
    	cout << "Letzte Stelle von 's' wurde gefunden an \n" << pch-str+1;
    
    	return 0;
    }
    

    Jedoch bekomme ich folgende Fehlermeldungen:

    error C2665: "strrchr": Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.(Bezieht sich auf Zeile 11)
    error C2679: Binärer Operator '-': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)(Bezieht sich auf Zeile 13)
    

    Langsam, was will ich machen?

    Ich will von einem String die letzte Stelle des Buchstabens s . Dazu benötige ich, wie im Beispiel auf http://www.cplusplus.com/reference/ zu sehen die Funktion strrchr. Um diese Funktion einbinden zu können, benötige ich die Bibliotheken von stdio.h und string .

    Ich dachte, dass ich es mit #include<cstring> und #include<stdio.h> getan hätte...

    Wo liegt mein Denkfehler??

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • Ich will von einem String die letzte Stelle des Buchstabens s.

    std::string str = "Dies ist ein einfacher String.";
    std::cout << "Letztes Vorkommen: " << str.rfind( 's' );
    

    Ungetestet.
    Man kann selbstverständlich noch auf npos prüfen, wenn man sehr akribisch ist.
    (Für das Beispiel macht es keinen Unterschied)



  • strchr arbeitet mit C-Strings (Nullterminierte char-Arrays) und nicht mit dem C++-string.
    Steht auch so in der Referenz. Für den ersten Parameter wird const char * oder char * erwartet. Da steht nicht string .



  • DirkB schrieb:

    strchr arbeitet mit C-Strings (Nullterminierte char-Arrays) und nicht mit dem C++-string.
    Steht auch so in der Referenz. Für den ersten Parameter wird const char * oder char * erwartet. Da steht nicht string .

    Hier steht es auch:
    http://en.cppreference.com/w/cpp/string/byte/strrchr



  • std::string ist nicht gleich char *.
    Du willst wahrscheinlich

    std::string str = "Das ist ein einfacher String.\n";
    	std::string pch;
    
    	pch = strrchr(str.c_str(), 's');
    

    Wobei pch = strrchr(str.c_str(), 's'); den halben String kopiert, das willst du wahrscheinlich gar nicht.



  • nwp3 schrieb:

    Du willst wahrscheinlich

    std::string str = "Das ist ein einfacher String.\n";
    	std::string pch;
    
    	pch = strrchr(str.c_str(), 's');
    

    Nein, das will er nicht. Er will, was ich oben vorgemacht habe.



  • Bevor du weiter char-Arrays und std::string durcheinander bringst, ändere erst mal ganz schnell dein Passwort (siehe anderer Thread)! ⚠



  • _matze schrieb:

    Bevor du weiter char-Arrays und std::string durcheinander bringst, ändere erst mal ganz schnell dein Passwort (siehe anderer Thread)! ⚠

    Hat er es immer noch nicht geändert? Oder hast du es erraten? :xmas2:



  • Ich sag's nur noch mal, weil noch keine Reaktion von ihm gekommen ist. 🙂



  • Ich habe es jetzt doch schon geändert....

    Bzw. auf welches Passwort bist Du gekommen?

    Edit:

    Spätestens jetzt kommt niemand mehr darauf, wie mein Passwort ist... Wie blöd war ich nur, mein Passwort frei zu gänglich zu machen... *Kopf gegen die Wand schlag*



  • Ändere es am besten auch überall, wo du es sonst noch verwendet hast.


Anmelden zum Antworten