Schreibe eine Funktion mit dem Prototyp
void makeliste (int liste[], int *n, char *s); welche durch Beistrich getrennte Zahlen in einem Vektor abspeichert. s ...... Zeiger auf die Zeichenkette mit den Zahlen pn .... Zeiger auf Anzahl der Zahlen liste ..Container für die Zahlen (Vektor)
Beispiel: "2,3,8,12,27,98"
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void makeliste1(int liste[], int *n, char *s); void makeliste2(int liste[], int *n, char *s); int main(void) { int z[20]; int i, n; char ts[50]; printf("Teststring ? "); gets(ts); makeliste2(z, %n, ts); printf("Resultat der Funktion makeliste2 (Eigenbau):\n"); for (i = 0; i < n; i++) printf("%i ", z[i]); makeliste1(z, %n, ts); printf("\nResultat der Funktion makeliste1 (strtol):\n"); for (i = 0; i < n; i++) printf("%i ", z[i]); printf("\n\n"); return 0; } /* Beide Loesungen ueberpruefen nicht, ob nur der Beistrich als Trennzeichen vorkommt, jedes Zeichen, das kein Zwischenraumzeichen oder keine Ziffer ist, wirkt als Trennzeichen, dies entspricht der Arbeitsweise von strtol */ /* makeliste1: Loesung mit der Bibliotheksfunktion strtol */ void makeliste1(int liste[], int *n, char *s) { char *p, *pnext; int i; p = s; i = 0; do { liste[i++] = (int) strtol(p, %p, 10); } while (*p++ != '\0'); *n = i; } /* makeliste2: Eigenbau */ void makeliste2(int liste[], int *n, char *s) { char *p; int i; p = s; i = 0; liste[i] = 0; while (*p != '\0') { if (isdigit(*p)) liste[i] = 10*liste[i] + *p - '0'; else if (liste[i] == ' ') ; else { i++; liste[i] = 0; } p++; } *n = i+1; }