C++ Wie viele Zeichen im Array?



  • Hallo,
    ich weiss, das man das zum Beispiel in einer Schleife, die auf das Ende-Zeichen hin fragt, ermitteln kann. Es muss doch bestimmt aber noch ne einfachere Möglichkeit geben, zu ermitteln, wie viele Zeichen aktuell im Array sind. Gibt es dafür denn keinen Befehl? Bitte hilft mir, danke!



  • Von was für einem Array reden wir da genau? Meinst du einen nullterminierten String? Dynamisch allokiert?



  • Wie sind die Zeichen kodiert? ASCII? UTF-8 -16 -32 ... etc.



  • In einem Array der Größe X sind immer X Elemente.



  • Belli schrieb:

    In einem Array der Größe X sind immer X Elemente.

    X'D 👍

    Von welchen Arrays redest du? In C++ gibt es verschiedene.
    Da gibt es erstmal die sog. C-Arrays, oder auch echte Arrays:

    T foo[N]; // N muss zur Compile-Zeit feststehen
    

    Dessen Größe ermittelst du durch sizeof(foo) / sizeof(*foo) .
    Es gibt noch einen Trick mit einem Funktionstemplate:

    template<typename T, size_t N>
    constexpr size_t getSize(T (&)[N])
    { return N; }
    

    Dann gibt es STL-Container, dessen Größen ermittelst du durch deren Member-Funktion size() .
    Dasselbe gilt für std::basic_string (bzw. std::string ). Dieses Klassentemplate hat außerdem noch die Memberfunktion length() , die genau dasselbe wie size() zurückgibt.

    Du implizierst durch deine Aussage allerdings, dass du C-Strings meinst. In diesem Fall würde ich davon abraten, diese überhaupt zu verwenden, nimm doch std::basic_string .
    Willst du diesen Ratschlag nicht beherzigen, gibt es eben noch std::strlen aus der C Standardbibliothek, was genau das von dir beschriebene Verfahren anwendet, also doch kein Problem?

    P.S.: Das "Ende Zeichen" nennt sich Nullzeichen.

    Edit: Danke Nexus. 'n dummer Fehler. (Die Pause hat wohl doch mehr geschadet, als mir bewusst ist... 😞 )



  • Sone schrieb:

    ::strlen

    Ist übrigens wie alles in der C++-Standardbibliothek im Namensraum std .



  • @dot: Ich meine das ganz normale Array(char array[19]; zum Beispiel! (C-Strings)).

    @Rhombicosidodecahedron: Das spielt überhaupt keine Rolle!!!

    @Belli: Danke, aber das weiss ich auch!

    @Sone: Das ich die Arraygröße mit sizeof(array) / sizeof(array[0]) ermitteln kann
    weiss ich. Die Befehle lengh(), size() usw. kenn ich. Das das "Ende-Zeichen"
    Nullzeichen(Nullterminierung) heißt, weiss ich. Habs nur einfach mal so genannt.

    Also, an alle, die geantwortet haben, erstmal ein Danke. Ich meinte allerdings
    nicht, wie ich die Größe eines Arrays ermitteln kann, sondern
    wie ich ermitteln kann, wie viele Zeichen aktuell in einem Array sind. Dazu
    mal ein einfaches Beispiel:

    Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese
    ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie
    viele zeichen aktuell im Array gespeichert sind. Gibt es einen genauen Befehl
    dafür?

    Bitte jetzt nicht schreiben, das ich besser einen String nutzen soll. Strings
    nutze ich im algemeinen ja auch, jedoch nutze ich ab und zu auch ein char array.



  • sunnshine schrieb:

    Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese
    ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie
    viele zeichen aktuell im Array gespeichert sind.

    50



  • sunnshine schrieb:

    Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese
    ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie
    viele zeichen aktuell im Array gespeichert sind.

    Es sind 50.

    sunnshine schrieb:

    Bitte jetzt nicht schreiben, das ich besser einen String nutzen soll. Strings
    nutze ich im algemeinen ja auch, jedoch nutze ich ab und zu auch ein char array.

    Und mit welcher Begründung verwendest du im konkreten Fall ein char-Array? Ich sag ja nicht, dass char-Arrays nicht ihre Berechtigung haben, aber wenn du schon sagst, dass man dir nicht "nimm std::string" als Antwort geben soll, dann würd mich schon interessieren, wieso genau std::string deiner Meinung nach keine gute Antwort ist. 😉



  • sunnshine schrieb:

    Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50. Jetzt lese ich einen Namen oder sonst was ein. Jetzt möchte ich einfach nur ermitteln, wie viele zeichen aktuell im Array gespeichert sind. Gibt es einen genauen Befehl dafür?

    Sone hats dir schon gesagt.



  • Sone schrieb:

    Belli schrieb:

    In einem Array der Größe X sind immer X Elemente.

    X'D 👍

    Von welchen Arrays redest du? In C++ gibt es verschiedene.
    Da gibt es erstmal die sog. C-Arrays, oder auch echte Arrays:

    T foo[N]; // N muss zur Compile-Zeit feststehen
    

    Dessen Größe ermittelst du durch sizeof(foo) / sizeof(*foo) .
    Es gibt noch einen Trick mit einem Funktionstemplate:

    template<typename T, size_t N>
    constexpr size_t getSize(T (&)[N])
    { return N; }
    

    Ersteres würde ich vermeiden, wenn man nen Fall von array-to-pointer-decay hat ... passiert Anfängern sicher mal.

    Andere Lösung:

    auto n = distance(begin(arr), end(arr));
    

    Kracht auch wenns keine Compilezeit-Konstante ist.



  • @Belli: 50 stimmt nicht, wenn der Name sagen wir mal aus 13 Zeichen besteht!

    @dot: Wieso kommt ihr beide auf 50? Ihr wisst doch garnicht, aus wie vielen
    Zeichen das eingegebene Wort besteht.

    ...aber wenn du schon sagst, dass man dir nicht "nimm std::string" als Antwort geben soll, dann würd mich schon interessieren, wieso genau std::string deiner Meinung nach keine gute Antwort ist.

    Das wäre keine gute Antwort, da ich eine Frage über char Arrays gestellt
    hab! 😃 😃 😃

    Spaß!!!

    Ich möchte einfach char arrays nutzen, um eine Zeile aus einer Datei mit read() einzulesen.
    Ich weiss, mann könnte das natürlich auch mit z.b. string.c_str() oder so
    machen, aber mit char arrays find ich es im aktuellen Fall besser, da ich
    auch bequemer auf den Index zugreifen kann. Im Endeffekt ist das alles
    Geschmackssache. 😉



  • sunnshine schrieb:

    Wieso kommt ihr beide auf 50? Ihr wisst doch garnicht, aus wie vielen
    Zeichen das eingegebene Wort besteht.

    Das hast Du ja auch nicht gefragt. Deine Frage war, wieviel Zeichen in Deinem Array gespeichert sind, und das sind 50.



  • Belli

    Das hast Du ja auch nicht gefragt. Deine Frage war, wieviel Zeichen in Deinem Array gespeichert sind, und das sind 50.

    Wieso 50?



  • Wegen:

    sunnshine schrieb:

    [...]

    Nehmen wir mal an, ich habe ein char-array mit einer Größe von 50.



  • Belli: Das Array hat eine Größe von 50. Muss ja nicht heißen, das da auch
    50 Zeichen drin sind.



  • Gegenfrage:

    char foo[50];  //Wieviel Zeichen sind jetzt im Array?
    
    foo[5] = 'X';  //Wieviel Zeichen sind jetzt im Array?
    foo[5] = 0;    //und wieviel jetzt?
    

    Die richtige Antwort bleibt wie oben:
    Es sind immer 50.



  • sunnshine schrieb:

    Belli: Das Array hat eine Größe von 50. Muss ja nicht heißen, das da auch
    50 Zeichen drin sind.

    Was glaubst Du, soll denn sonst drin sein?



  • Ich möchte einfach char arrays nutzen, um eine Zeile aus einer Datei mit read() einzulesen.
    Ich weiss, mann könnte das natürlich auch mit z.b. string.c_str() oder so
    machen, aber mit char arrays find ich es im aktuellen Fall besser, da ich
    auch bequemer auf den Index zugreifen kann. Im Endeffekt ist das alles
    Geschmackssache. 😉

    Fa Fuq.

    1. Bei read gibst du die Größe selbst an!

    2. Zeilen liest man so ein:

    std::string line;
    std::istream stream....;
    std::getline(stream, line);
    

    3. Indexzugriff:

    char arr[] = "Bla";
    std::string str = "Bla";
    arr[0];
    str[0];
    

    Kein Unterschied.

    Und das ganze ist keine Geschmackssache. Wer nicht ohne sehr guten Grund und vernünftig gekapselt rohe Arrays zur Darstellung von Strings benutzt, der schreibt schlechten Code.



  • 1. Bei read gibst du die Größe selbst an!

    Ich weiss, aber bei read muss man doch eine C-String als Parameter mitgeben.
    Naja egal. Ich mach das halt gerne mit char-arrays. 🤡

    Ist halt wie schon geschrieben, meistens Geschmacksache!


Anmelden zum Antworten