Länge von Eingabe ermitteln...



  • Hey ihr,
    Folgendes Problem:

    #include <iostream>
    
    int main(void)
    {
       char nachricht[256];
       cin.getline(nachricht,256);
    }
    

    Da ich hier mit einer Char-Variable arbeite kann ich schlecht die Länge der eingegebenen Nachricht ermitteln, da die Größe des Charakters statisch ist: 256.

    Problem ist: Wie kann ich nun die Länge der Nachricht ermitteln, welche der User eingegeben hat.
    Habe schon überlegt eine Schleife zu verwenden um den Char durchzurattern und einfach zu gucken ab wann undefinierte Werte da stehn.

    Doch das funktioniert natürlich nicht.
    Kann ich anhand von der Größe des Cin-Buffers nun die Länge ermitteln?
    Oder gibts ne Kluge char-Funktion, welche z.B. folgendermaßen hiesse:

    nachricht.length()...-.- oder so

    Wäre nett, wenn wer helfen könnte.

    cya
    David



  • Da fällt mir nur was bei std::string ein:

    std::string x = "ABCD";
    	std::cout << x.size(); // Ausgabe: 4
    


  • Für C-Strings (terminiert durch ein char mit dem Wert 0) gibt es die C-Funktion strlen.



  • WOW!
    Strlen funktioniert ja sogar noch in C++.... ich dachte es wäre eine C-Funktion.
    Aber wies ausschaut kann man die C-Chars auch noch durch C-Funktionen jagen, auch wenns C++ ist 😉



  • - kack geschrieben -



  • Diese Funktionen sind auch Bestandteil von C++ und in der cstring deklariert.
    Warum willst du da eigentlich mit einem cher-Array arbeiten?



  • strlen schrieb:

    Für C-Strings (terminiert durch ein char mit dem Wert 0) gibt es die C-Funktion strlen.

    Genau mach doch einfach:

    #include <iostream>
    
    int main(void)
    {
       char nachricht[256];
       cin.getline(nachricht,256);
       cout << "Länge der Nachricht: " << strlen(nachricht) << endl;
    }
    

    Grüßle Oli



  • Nimm doch einfach std::string und std::getline(std::string&, std::istream&).

    PS: Ja, die C-Standardbibliothek ist Bestandteil derer von C++. Aber das heisst nicht, dass man diese Funktionen benutzen müsste, wenn es doch schöne Alternativen gibt.



  • std::memcpy
    

    ist auch in <cstring> ... man sollte dennoch std::copy aus <algorithm> nutzen usw. Nur weil es aus kompatibilitätsgründen usw. übernommen wurde, heißt es nicht, dass es C++ ist.

    Außerdem muss es, wenn dann so heißen:

    #include <iostream>
    #include <cstring>
    
    int main()
    {
       char message[256];
       std::cin.getline(message, 256);
       std::cout << "Laenge der Eingabe: " << std::strlen(message) << std::endl;
    }
    

    wobei ja std::strlen nur so lange durchgeht, bis es ein '\0' findet.

    #include <string>
    #include <iostream>
    
    int main()
    {
        std::string input;
        std::getline(std::cin, input);
        std::cout << "Laenge der Eingabe: " << input.length() << std::endl;
    }
    

    ...


Anmelden zum Antworten