Such Funktion für string Array
-
Gibt es eine Möglichkeit oder Funktion um herauszufinden wieviele Felder ein string array hat? Bei folgendem string array wie finde ich da bitte heraus weiviele felder das haben soll, mit einer Funktion z.B., weil mit sizeof geht das jetzt nicht mehr weil die einzelnen strings sind ja unterschiedlich groß und es gibt keinen einheitlichen Datentyp.
string gruss[14]={ "Sers", "Wie gehts?", "Grüß dich!", "Kennen wir uns?", "Grüß Gott!", "Na du?", "Was gibts?", "Alles klar?", "Salut", "Moin!", "Seysen", "Seeeeeeeeeeees", "Hi", "Hallo" };Dankeschön schon mal im Voraus.
-
wenn ich das jetzt richtig verstanden habe suchst du sowas
for ( int i = 0; i < 14; i++) { cout << gruss[i].length() << endl; }
-
Mh die Funktion versteh ich jetzt net ganz? Und ich kann ja keine For Schleife machen wo i < 14 ist. Ich weiß ja eben doch nicht das gruss 14 Felder hat. Und was ist length()? Dann kann ich ja einfach gruss[i].size() nehmen wenn ich wissen will wie lang ein Wort aus dem Feld ist.
Ne ich bräucht irgendwie eine Funktion in der ich nur gruss eingebe und dir mir dann die Felder von gruss returned. Also irgendwie so:
int Funktion(const string &s)
.......
int l=fields(s);
return l;
.....Mh kann sich jemand vorstellen was ich mein? Aber wie soll man den dann außerdem den Parameter übergeben weil ich will ja nur gruss übergeben und nicht gruss[0] oder gruss[1]........... aber die Funktion würde ja jetzt z.B. immer gruss[...] erarten wenn ich da nur gruss reinschreibe dann kommt ja n Error. Mhhhhhhhhhhh kann sich einer vorstellen was ich mein bzw. weiß jemand was ich meine? Und kann mir zu nem Lösungsansatzhelfen?
-
nimm einen vector<string>, dann hast du das problem nicht
*edit*
alternativ füge einen endmarker ein, dann hast du eine abbruchsbedingung beim zählen
-
Hallo
Ein Endelement finde ich nicht so gut. Dann doch lieber der Funktion zusätzlich zu dem Array noch desen Länge übergeben. Oder natürlich gleich std::vector.
bis bald
akari
-
Da wo das Array bekannt ist, kannst du die Anzahl der Elemente mit sizeof(gruss)/sizeof(string) ermitteln.
-
Ich hätte es jetzt mit der Funktion probiert und jeden einzelnen string abgefragt ob er mehr als 0 Buchstaben hat, und dann zähl ich immer die durchläufe bis der string leer ist dann wird die Schleife beendet und die durchläufe sinn dann die Anzahl der Felder. Weiß jemand was ich mein??? Könnte das klappen? Bei mir irgendwie nicht es kommt folgender Error:
error: request for member `size' in `(+s)->std::basic_string<_CharT, _Traits, _Alloc>::operator[] [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((unsigned int)temp))', which is of non-class type `const char'int fields(const string &s) { int temp=0; int length; do { length=s[temp].size(); // <-- Error ist in der Zeile cout << length; ++temp; }while(length!=0); return temp; }PS: Ich hab noch nie was von vektor gehört was ist das und wie soll das funktionieren. Hat jemand n link? Ich werd aber jetzt au mal selber googeln.
Danke schon mal im Voraus.
-
-
Stromberg schrieb:
...
PS: Ich hab noch nie was von vektor gehört ...Merke Dir einfach: Sehr oft die bessere Alternative zu einem Array.

Hier findet man Manches ...Gruß,
Simon2.
-
Stromberg schrieb:
...
int fields(const string &s) { int temp=0; int length; do { length=s[temp].size(); // <-- Error ist in der Zeile cout << length; ++temp; }while(length!=0); return temp; }...
Ist eigentlich nicht besonders schwer:
- Was ist "s" ? -> ein "string const &"
- Was macht "[]" mit s ? -> string::operator[]() aufrufen ... und der gibt ein char zurück.
- Was hat man mit "s[temp]" in der Hand ? -> ein char
- Hat char eine Funktion size() ? -> Nein !
Wenn ich recht sehe, möchtest Du mit "fields" gar nicht mit einem string arbeiten, sondern mit einerm Array von strings .... vermutlich in C-Pointer-Arithmetik gedacht ... und dann falsch von Pointer auf Referenz abgebogen.

AAAABER: Zwar degenerieren Arrays zu Pointern beim Funktionsaufruf .... aber keinesfalls zu Referenzen. Entweder musst Du also (wie in C) mit "fields(string const* s)" arbeiten,
oder (was ich persönlich für besser halte) mit "std::vectorstd::string const &" .... allerdings brauchst Du damit die ganze fields-Funktion nicht mehr, weil std::vector bereits eine size()-Funktion hat.Mal eine Frage: Wo kompliiert denn das
Stromberg schrieb:
...
string gruss[14]={ "Sers", "Wie gehts?", "Grüß dich!", "Kennen wir uns?", "Grüß Gott!", "Na du?", "Was gibts?", "Alles klar?", "Salut", "Moin!", "Seysen", "Seeeeeeeeeeees", "Hi", "Hallo" };...
eigentlich ohne Warnungen ?
Sieht mir seltsam aus...Gruß,
Simon2.
-
Stromberg schrieb:
Gibt es eine Möglichkeit oder Funktion um herauszufinden wieviele Felder ein string array hat? Bei folgendem string array wie finde ich da bitte heraus weiviele felder das haben soll, mit einer Funktion z.B., weil mit sizeof geht das jetzt nicht mehr weil die einzelnen strings sind ja unterschiedlich groß und es gibt keinen einheitlichen Datentyp.
lolz schrieb:
Da wo das Array bekannt ist, kannst du die Anzahl der Elemente mit sizeof(gruss)/sizeof(string) ermitteln.
Richtig!
string gruss[14]={ "Sers", "Wie gehts?", "Grüß dich!", "Kennen wir uns?", "Grüß Gott!", "Na du?", "Was gibts?", "Alles klar?", "Salut", "Moin!", "Seysen", "Seeeeeeeeeeees", "Hi", "Hallo" }; size_t StringArrayFelder = sizeof gruss/sizeof string;StringArrayFelder = 14 !