Variablen



  • Hi @ll
    ich habe neulich angefangen c++ zu lernen ... ich kenne schon die variablen int,long, unsigned int, unsigned long, usw... doch diese speichern nur Zahlen... Könnt ihr mir sagen welche die Variablen sind, die auch texte speichern?? 🙄

    !dange im vorraus!



  • Hallo

    such im Forum nach std::string.

    bis bald
    akari



  • ich finde nichts...



  • bur4k schrieb:

    ich finde nichts...

    Dann schau in deinem Buch nach.



  • Zeichenkatten kannst du auch natürlich so speichern, ohne gleich ein std::string verwenden zu müssen:

    char* variable = "ich bin ein cooler text";
    

    Eine kurze Erklärung findest du in deinem C++ Buch oder auch hier: http://tutorial.schornboeck.net/c_string.htm und hier in der C++ FAQ: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39497.html

    Man nennt diese auch C-Strings, weil dies die einzige Möglichkeit in C ist, eine Zeichenkette zu bilden. Du hast halt nicht die ganzen Vorteile, die dir die Klasse std::string bietet. Das wäre z.B. das Speichermanagement, damit du dich um gar nichts mehr kümmern musst oder die ganzen überladenen Operatoren, die die Sache sicherlich vereinfachen.



  • Mein Tipp: Vergiss die C-Strings, bis du Arrays und Pointer beherrschst. Danach auch. Nimm std::string.



  • ChrissB! Versau die C++ Neulinge bitte nicht mit C-Kram!

    bur4k! int, long usw. sind keine Variablen sondern Typen. Sie stellen einen Typ FÜR eine Variable da. Wenn du Zeichenketten (Wörter, Sätze, wie auch immer) speichern willst, solltest du dich mit der Klasse std::string befassen. Diese Klasse findest du im header <string> und im Namespace std.

    #include <string>
    #include <iostream>
    
    int main()
    {
       std::string meinText("Hallo");
    
       std::cout << meinText << std::endl;
    }
    

    Was die string-Klasse noch alles kann, kannst du in jedem guten C++ Buch oder auf http://www.cppreference.com nachlesen.



  • Artchi schrieb:

    ChrissB! Versau die C++ Neulinge bitte nicht mit C-Kram!

    Ich versaue sie nicht, ich will es nur als Ergänzung an std::string anmerken, dass es noch andere Möglichkeiten gibt, eine Zeichenkette in einer Variable zu speichern. Es ist seine Entscheidung, was er schlussendlich einsetzt. Ich persönlich setzte in den meisten Fällen auch std::string ein. Ein paar Gründe faür habe ich ja oben schon gepostet. Wenn du aber zum Beispiel ein Programm auf eine C-Lib aufbausts (aufbauen musst), hast du oft das Problem, dass viele Funktionen ein char* erwarten.



  • std::string::c_str()



  • Michael E. schrieb:

    std::string::c_str()

    Willst du das const wegcasten mittels const_cast<T>(foo)?
    Sonst kriegste nen Error: invalid conversion from `const char*' to `char*' 😉



  • Wie Michael schon gepostet hat, gibt es auch hierfür keinen Grund char-Arrays einzusetzen. string kann locker auf Wunsch eines liefern.

    Außerdem hat mich folgendes gestört:

    ChrissiB schrieb:

    ohne gleich ein std::string verwenden zu müssen

    Das hört sich so an: "naja, std::string ist voll nervig und voll schlecht. Wenns nicht unbedingt sein muß, würd ich lieber kein std::string benutzen."

    Und DAS geht nun wirklich auf keine Kuhhaut. Es gibt ABSOLUT KEINEN Grund nicht std::string zu benutzen. Man sollte nicht mal dran denken, wenn man einen C++ Compiler und std::string zur Verfügung hat, dieses nicht zu benutzen. Wenn doch, sollten wir alle aufhören in C++ zu programmieren und lieber zu C zurück kehren.



  • ChrissiB schrieb:

    Michael E. schrieb:

    std::string::c_str()

    Willst du das const wegcasten mittels const_cast<T>(foo)?
    Sonst kriegste nen Error: invalid conversion from `const char*' to `char*' 😉

    Nö. http://www.cppreference.com/cppstring/c_str.html



  • Michael E. schrieb:

    ChrissiB schrieb:

    Michael E. schrieb:

    std::string::c_str()

    Willst du das const wegcasten mittels const_cast<T>(foo)?
    Sonst kriegste nen Error: invalid conversion from `const char*' to `char*' 😉

    Nö. http://www.cppreference.com/cppstring/c_str.html

    Verstehe ich nicht, was willst du mir damit sagen?
    Ich weiß, dass c_str() ein const char* zurückliefert, damit der interne nicht von außerhalb verändert werden kann. Manche Funktionen aus C-Libs erwarten aber ein char*.



  • also.... ich meinte eigendlich das:

    include <iostream>
    
    using namespace std;
    
    int main()
    {
        int isim;
        int o=Oguzhan;
        int oe=Ömer;
        int k=Kemal;
        cout << "Wer bist du?";
        cin >> isim;
    
        if(isim==o)
        {
                     cout << "Hey Oguzhan!!!" << endl;
        }
    
        if(isim==oe)
        {
                     cout << "Hi Ömer!!!" << endl;
        }
    
        if(isim==k)
        {
                     cout << "Moin Kemal!!!" << endl;
        }
    
        cin.get();
    }
    

    Aber ich kann die variablen in denen Texte gespeichert werden sollen (int ...) nicht benutzen, da sie nur Zahlen speichern. Was könnte ich da machen?



  • Artchi schrieb:

    Wie Michael schon gepostet hat, gibt es auch hierfür keinen Grund char-Arrays einzusetzen. string kann locker auf Wunsch eines liefern.

    Ist mir klar.

    Artchi schrieb:

    Außerdem hat mich folgendes gestört:

    ChrissiB schrieb:

    ohne gleich ein std::string verwenden zu müssen

    Das hört sich so an: "naja, std::string ist voll nervig und voll schlecht. Wenns nicht unbedingt sein muß, würd ich lieber kein std::string benutzen."

    Die Wortwahl ist vermutlich nicht gut getroffen, aber als ich den Satz schrieb, habe ich an den Overhead gedacht, den std::string mit sich bringt.

    Wie ich bereits geschrieben habe, setze ich auch std::string ein und wollte hier nur eine Alternative zeigen, wie man es auch noch machen kann. Empfehlen tue ich selber auch std::string, weil es auch einfacher zu verwenden ist, als die Funktionen aus <cstring>.

    Artchi schrieb:

    Wenn doch, sollten wir alle aufhören in C++ zu programmieren und lieber zu C zurück kehren.

    Soso. Heißt das, dass die einzige Erneuerung in C++ die string-Klasse ist? 🙄



  • ok ... alles klar... könnte jemand dann bitte sagen wie mein programm mit std::string wäre?



  • #include <iostream>
    #include <string>
    
    int main()
    {
        std::cout << "Wer bist du? ";
        std::string isim, o="Oguzhan", oe = "Ömer", k = "Kemal";
        std::cin >> isim;
    
        if(isim == o)
            std::cout << "Hey Oguzhan!!!" << std::endl;
        else if(isim == oe)
            std::cout << "Hi Ömer!!!" << std::endl;
        else if(isim == k)
            std::cout << "Moin Kemal!!!" << std::endl;
    
        std::cin.get();
    }
    


  • ChrissiB schrieb:

    aber als ich den Satz schrieb, habe ich an den Overhead gedacht, den std::string mit sich bringt.

    Sag mir doch bitte welchen Overhead std::string hat? Ich kann keinen nenneswerten Overhead finden. Was brauchen wir denn für einen String?

    1. Ein char-Array
    2. Eine Variable, die die Anzahl der Felder speichert.

    Ehm, also für mich macht das nur eine int-Variable mehr aus. Für den Komfort und vorallem die SICHERHEIT die mir String gegenüber einem C-String bietet, nehme ich doch seeeeehr gerne 32bit bzw. 4byte mehr Speicherverbrauch pro String in Kauf, oder? Performancemäßig macht das ganze sogar garkeinen Unterschied gegenüber alten C-Strings.



  • ChrissiB schrieb:

    Michael E. schrieb:

    ChrissiB schrieb:

    Michael E. schrieb:

    std::string::c_str()

    Willst du das const wegcasten mittels const_cast<T>(foo)?
    Sonst kriegste nen Error: invalid conversion from `const char*' to `char*' 😉

    Nö. http://www.cppreference.com/cppstring/c_str.html

    Verstehe ich nicht, was willst du mir damit sagen?
    Ich weiß, dass c_str() ein const char* zurückliefert, damit der interne nicht von außerhalb verändert werden kann. Manche Funktionen aus C-Libs erwarten aber ein char*.

    Oh, flasch rum gelesen. Aber wie viele Libs wollen denn char*?



  • ChrissiB schrieb:

    Soso. Heißt das, dass die einzige Erneuerung in C++ die string-Klasse ist?

    Nein, aber es ist doch eine der meistbenutzen Typen in einem Programm. Ich kenne keine Software die nicht mit Strings hantieren muß, neben anderen Typen wie int. Und C-Strings sind vorallem sehr gefährlich zu handhaben. Ich meine nur, deshalb haben wir doch C++? Um bessere Programme zu schreiben.


Anmelden zum Antworten