Witam wszystkich,
ostatnio dostałem do rozwiązania pewien problem, mianowicie przekazywanie / zwracanie tablicy do funkcji w języku C.
Zadanie polegało na tym aby stworzyć funkcję, która przyjmuje tablicę znaków, a zwraca nową tablicę, pomniejszoną o cyfry występujące w tej pierwszej tablicy (fajnie jakby i rozmiar tej nowej tablicy się zmniejszył do niezbędnego minimum), oraz zwraca ilość wystąpień każdej cyfry w tablicy wejściowej).
Wymyśliłem coś takiego, ale nie wiem czy to jest najoptymalniejsze rozwiązanie (kod się pewnie nie kompiluje, wymyślony na szybko):
char * funkcja(char string[], char *wsk_do_zwrocenia, int cyfry[10])
{
memset(cyfry, 0, 10 * sizeof(int));
int i = 0, j = 0;
char * tmp = (char)calloc(strlen(string)+1,1);
while(string[i] != '\0')
if(isdigit(string[i]))
++cyfry[string[i++] - '0'];
else
tmp[j++]=string[i++];
*wsk_do_zwrocenia= calloc(strlen(tmp)+1,1);
strcpy(tmp,*wsk_do_zwrocenia);
free(tmp);
return *wsk_do_zwrocenia;
}
int main()
{
char * tablica = "sdsa7d6783ry348y3728f784rfg74378f34";
char * nowatablica;
char cyfry[10];
funkcja(tablica, &nowatablica, cyfry);
free(nowatablica);
}
Proszę o wszelkie uwagi, czy tak można zrobić, czy free(nowatablica) zadziała tak jak powinno etc).
Pozdrawiam.