Summe der Felder mit Länge 0 ermitteln???
-
Hallo,
Ich habe eine structur geschrieben, in die 2 char und ein int Wert gespeichert werden. Maximal sollen 100 Werte gespeichert werden. Jetzt möchte ich jedoch wissen wieviele Werte in dieser Structur schon gespeichert sind. Ich habe mir überlegt, das der charwert "Vorname" innerhalb meiner Struktur auf jeden Fall belegt ist. Also ermittel ich einfach die Charfelder "Vorname" innerhalb meiner Struktur, die länger als 0 sind. Diese felder werden addiert und schon habe ich die menge der gespeicherten Datensätze. Allerdings funktioniert das nirgendwie nicht richtig.
for(y=0; y<100; y++){ cout <<strlen(Telefonbuch[y].Vorname)<<endl; laenge= strlen(Telefonbuch[y].Vorname); if(laenge < 1){ m=0; } else m=1; Menge = Menge + m; cout<<Menge; }
wenn ich jetzt z.b. 2 Datensätze gespeichert habe dann bekommt der beim Menge zahlen wie 3472923 raus??? Warum macht der das? Die Variablen Menge, m und y habe ich alle als int deklariert.
Übrigens: Die Structur, in die ich die Werte sschreibe sieht komplett so aus:
struct eintraege{ char Vorname[50]; char Nachname[50]; int Telefonnummer; }; eintraege Telefonbuch[100];
-
Wie wäre es denn wenn du die Klasse string verwendest?
Damit hast du dann eine Instanz Vorname, die beliebig (bitte kein Erbsenzählen) groß sein kann.Die Länge bekommst du dann mit Vorname.size()
-
Du meinst also statt des Charwertes Vorname einen string für Vorname einsetzen? Ok. Aber dass muss soch auch so irgendwie gehen. Char ist doch eine Zeichenkette. Und die solte doch auch mit strlen angezeigt werden.
-
Und wenn wir schon bei STL sind.
Lass den array weg und nimm stattdessen einen Container z.B. einen vector, dann
kannst du dir die ganze Abzählerei gleich ganz sparen.mfg JJ
-
Mr.Blond schrieb:
Du meinst also statt des Charwertes Vorname einen string für Vorname einsetzen? Ok. Aber dass muss soch auch so irgendwie gehen.
Ich glaube, du hast das falsch verstanden oder ich dich ...
Er meint, dass du statt char die Klasse string verwendest -> string Vorname;
Damit hast du eine dynamische Verwaltung der Stringlängen und brauchst dich nicht auf 50 Zeichen zu beschränken, außerdem kannst du die Länge des Strings sehr einfach mit der Mehode string::size() abfragen. Und du schreibst dein Programm wirklich in C++
-
Also ich verstehe deine Frage nicht so ganz. Möchtest du ein Array von deiner beschriebenen Struktur erzeugen, und dann wissen wie viele Elemente schon belegt sind oder möchtest du alle Zeichen des Vornamens addieren und mit diesen Zeichen irgendwas machen
Bei ersterem kannst du sowas in der Art machen:
struct eintraege{ std::string vorname; std::string name; int telnr; }; ... eintraege telefonbuch[100]; unsigned int nrOfEntries = 0; // Anzahl der Eintraege, die In Struktur telefonbuch geschpeichert sind ... // Beispiel Eintrag hinzufuegen. ... ... if(nrOfEntries < 100) { telefonbuch[nrOfEntries].vorname = zu_speichernder_vorname; telefonbuch[nrOfEntries].name = zu_speichernder_name; telefonbuch[nrOfEntries].telnr = zu_speichernder_nummer; ++nrOfEntries; // Aktuelle Anzahl der Elemente inkrementieren } ...
Wenn du jetzt einen Eintrag hinzufügst, musst du die Variable nrOfEntries inkrementieren. (Wie im Beispiel). Wenn du einen Eintrag löschst dementsprechend dekrementieren.
Über diese Variable kanst du somit die aktuell gespeicherten Eintrage in der Struktur telefonbuch abfragen bzw. ausgeben o.ä. ..
Caipi
//Edit: Man bin ich mal wieder langsam...