Pointer auf mehrdimensionale Arrays an Fkt übergeben
-
Hallo Gemeinde
ich hab eine Frage bezüglich Pointer auf mehrdimensionale Arrays mein Programm soll die Vokale zählen und es funktioniert aber wenn ich im Funktionsrumpf
void zaehle_buchst(char *text,int laenge,int **zeichen) mache klappt es nicht
meine frage ist nun wieso das nicht klappt ich würde gerne es mit Pointer machen anstatt den Indexoperator bei eindimensionalen arrays klappts ja muss auch ne möglichkeit geben es auf zweidimensioenalen arrays anzuwendenVielen Dank
#include <stdio.h> #define ARR 5 void zaehle_buchst(char *text,int laenge,int zeichen[][2]) { int i=0,j; while( text[i] != '\0' ) { for(j=0; j<laenge; j++) { if( text[i] == zeichen[j][0] ) { zeichen[j][1]++; } } i++; } } int main(void) { char text[]="Hallo wie gehts euch"; int i,vokalcount[ARR][2]={ {'a',0},{'e',0},{'i',0},{'o',0},{'u',0} }; zaehle_buchst(text,5,vokalcount); for(i=0; i<ARR; i++) printf("\n%c : %i",vokalcount[i][0],vokalcount[i][1]); fflush(stdin); getchar(); return 0; }
-
Was genau klappt nicht? Könntest du bitte Compilerfehler/Warnungen oder auftretende Laufzeitfehler posten?
-
void zaehle_buchst(char *text,int laenge,int (*zeichen)[2])
ist schon erstmal ein Zeiger, und falls du die 2. Dimension auch noch anonymisieren willst, ist der Aufwand nochmal ein bisschen höher.
-
Du kannst Zeiger und beide Dimensionen übergeben:
void zaehle_buchst(char *text, int *zeichen, int d1, int d2) { int i=0,j; while( text[i] != '\0' ) { for(j=0; j<d1; j++) { if( text[i] == zeichen[j*d2] ) { zeichen[j*d2+1]++; } } i++; } } int main() { const int ARR = 5; char text[]="Hallo wie gehts euch"; int vokalcount[][2]={ {'a',0},{'e',0},{'i',0},{'o',0},{'u',0} }; zaehle_buchst(text,vokalcount,ARR,2); ... }
Oder, was mir in diesem Falle besser gefallen würde
typedef struct { char c; int i; }CCount; void zaehle_buchst(const char *text, CCount *cc, size_t laenge) { int i=0,j; while( text[i] != '\0' ) { for(j=0; j<laenge; ++j) { if( text[i] == cc[j].c ) { ++cc[j].i; } } ++i; } } int main() { const int ARR = 5; char text[]= "Hallo wie gehts euch"; CCount vokalcount[]={ {'a',0},{'e',0},{'i',0},{'o',0},{'u',0} }; zaehle_buchst(text, vokalcount, 5); .... }
fflush(stdin) sollte vermieden werden, schau mal in die FAQ.