Sortowanie struktury z char

0

typedef struct UCZEN
{
char imie[20];
char nazwisko[40];
char klasa[10];
float srednia;
};

Taką mam strukturę, chcę ją posortować np. wg. nazwiska ale nie wiem jak to się porównuje w takim sortowaniu? Dodam, że funkcja sortująca ma u mnie dwa parametry, gdzie pierwszy to tablica struktur a drugi to ilosc osob do posortowania
void sortuj(UCZEN tablica[MAX], int i)
{ }

0

Robiłem to kiedyś w języku C. Zobacz sobie funkcję sortującą i przekształć to sobie na struktury. Btw wydaje mi się, że piszesz w kompilatorze C++, dlatego nie musisz pisac "typedef struct UCZEN". Wystarczy jak wpiszesz struct UCZEN, a potem stworzysz obiekt

struct UCZEN
{
    char imie[20];
};
UCZEN student;
cin >> student.imie;

Albo, w sumie bardziej spotykany styl w książkach

typedef struct //tworzysz strukturę bez nazwy
{
    char imie[20];
} UCZEN;

Tutaj kod:

#include <stdio.h>
#define N 10

int max(int*, int);
void sort(int*);

int main()
{
	char tab[] = {"===================================="},
		tab2[] = {"=                                  =\r="};
	int tablica[N], i;

	printf("%s\n%s        Program sortujacy\n%s\n\n", tab, tab2, tab);
	
	printf("Podaj kolejne %d liczb calkowitych\n", N);
	for(i = 0; i < N; i++)
	{
		printf("tab[%d] = ", (i + 1));
		scanf("%d", &tablica[i]);
	}
	
	sort(tablica);

	getchar();
	getchar();
	return 0;
}

int max(int* tab, int MAX)
{
	int i;
	
	for(i = MAX; i < N; i++)
		if(tab[MAX] < tab[i])
			MAX = i;

	return MAX;
}

void sort(int* tab)
{
	int i, j, help, wsk;

	for(i = 0; i < (N - 1); i++)
	{
		wsk = max(tab, i);

		help = tab[i];
		tab[i] = tab[wsk];
		tab[wsk] = help;

		for(j = 0; j < N; j++)
			printf("\nTab[%d] = %d", j, tab[j]);
		printf("\n\n");
	}
}
0

sorry nie o to mi chodziło. chciałbym przekształcić sortowanie przez wstawianie, które zrobiłem dla bodaj intów, na to, żeby porównywało chary. Ktoś coś pisał o jakimś strcmpi czy coś. Ciągle mi wyskakuje invalid conversion from char* to char, albo coś innego

void sortuj_wstawianie(int dane[],int n)
{
int i,j,x;

 for(j=n-2;j>=0;j--)
 {
                     x=dane[j];
                     i=j+1;
                     while(i<=n && x>dane[i])
                     {
                     dane[i-1]=dane[i];
                     i++;
                                }
                                
                     dane[i-1]=x;
                     }

}
takiej struktury:

typedef struct UCZEN
{
char imie[20];
char nazwisko[40];
char klasa[10];
float srednia;
};

0
#include <iostream>
#include <cstring>
using namespace std;

void sortuj(char tab[][10]);

int main()
{
	char tablica[10][10] = {"b", "z", "g", "g,", "a", "v", "x", "m", "t", "y"};

	
	sortuj(tablica);

	for(int i = 0 ; i < 10; i++)
		cout << tablica[i] << endl;

	system("pause");
	return 0;
}

void sortuj(char tab[][10])
{
	int i,j;
	char x[10];
      
    for(j = 1; j < 10; j++)
    {
		strcpy(x, tab[j]);
        i = j;
        while(i > 0 && strcmp(tab[i - 1], x) < 0) // jak chcesz alfabetycznie od a-z to zmien znak z '<' na '>'
        {
			strcpy(tab[i], tab[i - 1]);
            i--;
        }
        
		strcpy(tab[i], x);
    }
}
0

ale jak sortować jak to jest struktura? np. jak chce dać zmienną x=tablica[j] to muszę x jakoś zadeklarować, ale jako co?, jak dam we funkcji zamianę wartości to tylko one mi się posortują tablica to jest tablica struktur czyli ma kilka wymiarów chyba, poza tym jeśli dam np. tablica[i]=tablica[i+1] to czy skopiuje mi wszystkie dane typu imie nazwisko srednia itd?

0

jeżeli nie przeładowywujesz operator=, to w strukturze przekopiuje Ci każdy element z osobna, czyli jeżeli weźmiesz i będziesz sortował według obiekt[i].imie, to będziesz mial posortowaną strukturę a nie same jej wewnętrzne składowe.

0
MJay napisał(a)

jeżeli nie przeładowywujesz operator=, to w strukturze przekopiuje Ci każdy element z osobna, czyli jeżeli weźmiesz i będziesz sortował według obiekt[i].imie, to będziesz mial posortowaną strukturę a nie same jej wewnętrzne składowe.

Tyle to ja rozumiem. Nie wiedziałem jak zapisać x jako element struktury, ale już dostałem odpowiedź: struct UCZEN x;

0

przede wszystkim strukturę zdefiniuj tak

typedef struct
 {
 char imie[20];
 char nazwisko[40];
 char klasa[10];
 float srednia;
 } UCZEN;
//potem będziesz mógl deklarować obiekty w ten sposób
UCZEN x;
//zamiast
//struct UCZEN x;

Po drugie, przecież dałem Ci odpowiedź. x[i].imie to jest odwolanie sie do skladnika zawierającego informacje o imieniu w tablicy struktur w obiekcie i-tym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1