tnightlife Geschrieben 31. März 2010 Geschrieben 31. März 2010 Hallo, wie kann man folgendes machen größe des strings muss so wie die int zahl der variable+1 sein, ich komme nicht dahinter wie ich das zuweisen muss variable x string Ein danke im voraus für die antworten Zitieren
Klotzkopp Geschrieben 31. März 2010 Geschrieben 31. März 2010 Strings gibt's in C strenggenommen nicht, nur nullterminierte char-Arrays. char Ein[x+1]; Das geht so aber nur nach dem C-Standard von 1999, den unterstützt nicht jeder Compiler. Nach dem alten Standard (1990) musst du das mit malloc machen: char* Ein = malloc(x+1); // Am Ende free nicht vergessen![/code] Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 wenn ich Ein[] am anfang eines unterprogramms schon deklariert habe, aber noch keine länge angegeben habe, muss ich also weiter unten im programm, wenn ich weiß wie lang das array sein soll (x+1) muss ich dann mit dem malloc arbeiten? Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 ist das so richtig Nach[] = malloc(sizeof(Anzahl+1)); wenn Anzahl meine variable ist Zitieren
Klotzkopp Geschrieben 31. März 2010 Geschrieben 31. März 2010 wenn ich Ein[] am anfang eines unterprogramms schon deklariert habe, aber noch keine länge angegeben habe,Dann musst du Ein mit einem Literal initialisiert haben. Ein hat dann die Länge des Literals, daran kannst du später auch nichts mehr ändern. Zeig doch mal diese Deklaration. Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 hier das programm, das programm hat das ziel alle vocale zu finden und wort für wort die vokal anzahl zu wiedergeben und die anzahl aller worte im text, es können am anfang und am ende leerzeichen auftreten int *addVocalCount(char *Ein){ int EinL, i=0, j=1, start, Anzahl=0, Nach[]; EinL = strlen(Ein); while(Ein[i]=' ')&&(i<EinL){ i=i+1; } start = i; while(i<EinL){ if(Ein[i]=' '){ Anzahl = Anzahl+1; while(Ein[i]=' '){ i=i+1; } i=i+1 } if(strrchr(Ein)=' '){ Anzahl=Anzahl+1; } Nach[] = malloc(sizeof(Anzahl+1)); Nach[0] = Anzahl; while(1<=i<Anzahl){ Nach[i]=0 } while(start<=i<EinL){ if(isVocal(Ein[i])){ Nach[j]++ } if(Ein[i]=' '){ j=j+1; while(Ein[i]==' '){ i=i+1; } } return Nach; Zitieren
Klotzkopp Geschrieben 31. März 2010 Geschrieben 31. März 2010 int Nach[]Welcher Compiler akzeptiert denn sowas? Oder hast du da etwas weggelassen? Und hast du nicht eben noch von einem String gesprochen? Warum ist das jetzt ein int-Array? Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 so irgendwo habe ich dinge vergessen oder falsch gemacht, weiß aber net wo genau expected identifier before '(' token steht im ersten while Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 so richtig kenne ich den aunterschied zwischen array und string garnicht, darum sage ich mal das oder das hehe;-) compi ist devc++ Zitieren
flashpixx Geschrieben 31. März 2010 Geschrieben 31. März 2010 compi ist devc++ Dev-Cpp wird seit Jahren nicht mehr weiter entwickelt und die letzte Version weist wohl Fehler auf Dev-C++ ? Wikipedia Zitieren
Klotzkopp Geschrieben 31. März 2010 Geschrieben 31. März 2010 ist das so richtig Nach[] = malloc(sizeof(Anzahl+1)); wenn Anzahl meine variable ist Nein. Erstens musst du einen Zeiger deklarieren, wenn du malloc benutzt, kein Array. Zweitens benutzt du sizeof falsch. sizeof liefert dir die Größe eines Typen. Wenn du ein Array mit malloc dynamisch reservierst, musst du die Anzahl der Arrayelemente mit der Größe eines Arrayelements multiplizieren. Bei char-Arrays kannst du dir letzteres sparen, weil sizeof(char) per Definition 1 ist. int* Nach = malloc((Anzahl+1)*sizeof(int));[/code] Zitieren
TDM Geschrieben 31. März 2010 Geschrieben 31. März 2010 so richtig kenne ich den aunterschied zwischen array und string garnicht, darum sage ich mal das oder das hehe;-) Ein Array ist eine Ansammlung von Werten eines Typs mit einer festen Größe. Ein String ist ein char-Array mit dem Zeichenkettenendekennzeichen ('\0'). Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 ja fällt mir jetzt auch wieder ein das sizeof für die länge des datentyps war, gut ich habe jetzt einfach mal Nach[Anzahl+1] benutzt oben bei der deklaration und habe alles mit malloc & co. weggelassen. es kommt aber immer wieder dieser fehler beim ersten while 8 expected identifier before '(' token ich komme da einfach nicht weiter Zitieren
Klotzkopp Geschrieben 31. März 2010 Geschrieben 31. März 2010 es kommt aber immer wieder dieser fehler beim ersten while 8 expected identifier before '(' token Du musst deine gesamte Schleifenbedingung in runde Klammern stecken. Zitieren
tnightlife Geschrieben 31. März 2010 Autor Geschrieben 31. März 2010 ok vielen dank hat geklappt, nur jetzt noch ein fehler und zwar in if(strrchr(Ein)=' '){ das es zu lang wäre steht dort?! das soll ja einlesen ob das letzte zeichen ein leerzecihen war Zitieren
Klotzkopp Geschrieben 31. März 2010 Geschrieben 31. März 2010 strrchr liefert dir aber nicht das letzte Zeichen eines Strings. strrchr sucht von hinten in einem String nach einem bestimmten Zeichen, und liefert dir zurück, ob und wo das Zeichen gefunden wurde. Das letzte Zeichen von Ein bekommst du mit Ein[strlen(Ein)-1] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.