[C] Tablica wielowymiarowa stringów

jeremaya
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 11 lis 2014, o 22:20
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy

[C] Tablica wielowymiarowa stringów

Post autor: jeremaya »

Witam,
mam do napisania program w C (nie C++), który będzie wczytywał z klawiatury dane dotyczące zawodów sportowych (np. imie, nazwisko, czas biegu, dystans). Tych danych (osób) ma być max. 50. Moim zadaniem jest posortowanie ich w zależności (do wyboru) wg nazwisk, czasów, dystansów.
Teraz moje pytanie, jak w C można (czy można?) prawidłowo zrobić tablice dwuwymiarowe stringów, bo to chyba byłoby najprostsze rozwiązanie można by tylko porównywać konkretne współrzędne (kolumny) z wiersza z tymi samymi w następnych wierszach.
Chyba, że może ktoś ma inny pomysł.

Z góry dzięki.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10222
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C] Tablica wielowymiarowa stringów

Post autor: Dasio11 »

W języku C napisem jest tablica charów, więc dwuwymiarowa tablica napisów 50x4, każdy długości 30, wygląda tak:

Kod: Zaznacz cały

char Tablica[50][4][30];
a posługiwać się nią można tak:

Kod: Zaznacz cały

strcpy( Tablica[5][0], "Jan" );  // Imię szóstej osoby = "Jan"
scanf( "%s", Tablica[8][1] );   // Wczytaj nazwisko dziewiątej osoby

Myślę jednak, że w twoim przypadku lepszym rozwiązaniem będzie użycie struktur:

Kod: Zaznacz cały

struct Dane
{
    char Imie[30];
    char Nazwisko[50];
    float Czas;
    int Dystans;
};

struct Dane Tablica[50];

scanf( " %s", Tablica[0].Imie );
scanf( " %s", Tablica[0].Nazwisko );
scanf( " %f", &Tablica[0].Czas );
scanf( " %d", &Tablica[0].Dystans );
...
Coś jeszcze dodam: powyższy kod dobrze sprawdzi się na pracownię / do użytku własnego, lecz jest podatny na tzw. błąd przepełnienia bufora. Aby go uniknąć, należałoby zamiast funkcji scanf użyć fgets, z czym jest więcej roboty, ale jest bezpiecznie.
Gouranga
Użytkownik
Użytkownik
Posty: 1588
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 245 razy

[C] Tablica wielowymiarowa stringów

Post autor: Gouranga »

żeby nie pisać wszędzie struct można zastosować taką składnię:

Kod: Zaznacz cały

typedef struct Zawodnik {
  char imie[30];
  char nazwisko[30];
  int dystans;
  double czas;
} Zawodnik;
i wtedy deklarujesz to jako

Kod: Zaznacz cały

Zawodnik tablica[50];
jeremaya
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 11 lis 2014, o 22:20
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy

[C] Tablica wielowymiarowa stringów

Post autor: jeremaya »

Bardzo dziękuję, teraz myślę już sobie poradzę.
ODPOWIEDZ