verkette Liste #2/ Ausgabe der Einzelnen Elemente
-
weiterer punkt, ich möchte nun eine funktion aufrufen, die die vorhandenen ziffern zählt. Dabei soll der Funktionskopf so aussehen:
int laengeListe(const zahlenliste*)
Ich frage mich nur was ich nun genau übergeben soll, die structur scheint es offenbar nicht zu sein oder?
-
mstrkrft_ schrieb:
weiterer punkt, ich möchte nun eine funktion aufrufen, die die vorhandenen ziffern zählt. Dabei soll der Funktionskopf so aussehen:
int laengeListe(const zahlenliste*)
Ich frage mich nur was ich nun genau übergeben soll, die structur scheint es offenbar nicht zu sein oder?
naja, du übergibst ihr einen pointer auf den string, dessen ziffern du zählen willst, und dann zählen:
int digits = 0; while (*str) if (isdigit (*str++)) digits++;
^^am ende der schleife ist in 'digits' die anzahl der ziffern.
-
hma ber wenn ich den string übergebe müsste das doch dann zeiger->ziffer sein oder?
-
mstrkrft_ schrieb:
hma ber wenn ich den string übergebe müsste das doch dann zeiger->ziffer sein oder?
ach, vergiss mein posting. ich bin nur von deiner frage ausgegangen, ohne den thread gelesen zu haben. du musst dich durch die liste hangeln, hast ja keine strings für die ziffern.
-
so hab das programm nochmal umgeschrieben und ne eigene funktion für das eintragen gemacht(so wird es übersichtlicher)!!!!
mit der funktion laengeliste soll ich nun die länge der verketten liste(also zahl der elemente) zählen. ich weiß nur nicht was ich an die funktion übergeben soll
mein code:
#include <stdio.h> #include <stdlib.h> typedef struct _zahlliste { int ziffer; struct _zahlliste *next; } zahlenliste; void eintragen(struct _zahlliste **anfang, int wert) { struct _zahlliste *zeiger=*anfang; while(zeiger->next!=NULL) {zeiger=zeiger->next;} zeiger->next=malloc(sizeof(struct _zahlliste)); zeiger=zeiger->next; if(zeiger==NULL) return; zeiger->ziffer=wert; printf("%d\n",zeiger->ziffer); zeiger->next=NULL; *anfang=zeiger; } int laengeListe(const zahlenliste*) { return 0; } int main() { struct _zahlliste *anfang; anfang=(struct _zahlliste*)malloc(sizeof(struct _zahlliste)); anfang->next=NULL; eintragen(&anfang,5); eintragen(&anfang,77); eintragen(&anfang,66); laengeListe(anfang); return 0; }
DANKE!
-
mstrkrft_ schrieb:
Als Ausgabe komme ich dann nur auf 12 und 3, was dann nur die letzten beiden werte sind.
ich hoffe mir kann jmd helfen!
Wenn du in der Schleife mit dem 2ten Element beginnst, kein Wunder, ne.
mstrkrft_ schrieb:
weiterer punkt, ich möchte nun eine funktion aufrufen, die die vorhandenen ziffern zählt.
Die Anzahl speichert man am besten beim Erstellen/Löschen.
-
ja nur ich muss das mit der funktion
int laengeListe(const zahlenliste*)
machen, nur was übergebe ich dort???
-
habe das problem soweit gelöst danke für alle die mitgeholfen haben!!! gucke mal ob ich das mit dem zählen nun hinbekomme
gruß!
-
mstrkrft_ schrieb:
ja nur ich muss das mit der funktion
int laengeListe(const zahlenliste*)
machen, nur was übergebe ich dort???
So wie es aussieht, willst du zählen, nachdem die Liste erstellt wurde.
In dem Fall übergibst du das erste Element, das funktioniert wie bei der Ausgabe, statt der Ausgabe inkrementierst du eine Zählvariable.
Aber wie schon erwähnt, besser ist es zu zählen, wenn du erstellst/löschst.
-
int laengeListe(const zahlenliste* pointer) { int i=0; while(pointer->next!=NULL) { pointer=pointer->next; i++; printf("blabla"); } return i; } ... int z=laengeListe(anfang); //Anfang=Anfangspointer, der immer auf das 1. Element zeigt
@big brother, genau richtig!das ist meine zählfunktion, allerdings scheint die abbruchbedingung falsch zu sein, muss ich noch drüber nachdenken!