string funktionen



  • wunderschönen guten morgen 🙂

    ich beschäftige mich im moment etwas mit c++, ich habe mir gerade 2 simple string funktionen geschrieben um mich etwas mit der sprache auseinader zu setzen.

    string strleft(string *str, unsigned int len)
    {
        string str2 = str->substr(0, len);
        return str2;
    }
    
    string strleft(char *chr, unsigned int len)
    {
        string str = static_cast<string>(chr);
        return str.substr(0, len);
    }
    
    int main(int argc, char *argv[])
    {
        string str = "123456";
        cout << strleft(&str, 3) << " " << strleft("654321", 3) << endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    nun wollt ich einfach mal nachfragen ob dies der 'richtige' ansatz ist und was man eventuelle besser machen könnte, oder ob ich hier eher unfug angestellt habe.



  • Hallo

    // String als Referenz übergeben, dann kann kein ungültiges
    // Objekt übergeben werden
    string strleft(const string& str, unsigned int len)
    {
        return str.substr(0, len);
    }
    
    /* Funktion brauchst du nicht, wird bereits durch erste erledigt
    string strleft(char *chr, unsigned int len)
    {
        string str = static_cast<string>(chr); // Nicht gut, char* und std::string sind nicht direkt verwandt, können nicht so gecastet werden
        return str.substr(0, len);
    }
    */
    int main(int argc, char *argv[])
    {
        string str = "123456";
        cout << strleft(str, 3) << " " << strleft("654321", 3) << endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    bis bald
    akari



  • #include <iostream>
    #include <string>
    using namespace std;
    
     const string strleft(const string& str, unsigned int len)
    {
        return str.substr(0, len);
    }
    
    /*const string strleft(const char *const chr, unsigned int len)
    {
        return static_cast<string>(chr).substr(0, len);
    }*/
    
    int main(int argc, char *argv[])
    {
        const string str = "123456";
        cout << strleft(str, 3) << " " << strleft("654321", 3) << endl;
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    irgendwie c c++ gemischt.



  • ok danke für den tip 🙂



  • netrobot schrieb:

    const string strleft(const string& str, unsigned int len)
    ^^^^^
    

    Hier ist die konstante Übergabe widerum nicht unbedingt erforderlich, da sowieso kopiert wird (ggfs. Return-Value-Optimized) und der Empfänger entscheiden kann ob das Ergebnis konstant sein soll.


Anmelden zum Antworten